Solucionat: django guarda les dades d'una altra classe mentre es desa una classe

Quan es desa una classe, Django desa totes les variables d'instància i mètodes de la classe. Això pot causar problemes si voleu desar dades d'una altra classe mentre deseu la classe.

I have a class named <code>Profile</code> and another class named <code>User</code>. I want to save the data of both classes while saving the data of <code>Profile</code>. How can I do this?
<code>class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Save User here

        return self
</code>


A:

You can access the related object with <code>.user</code>, so you can just call <code>.save()</code>:  (Note that you don't need to return anything from your override.)  If you're using Django 2+ and have set up your model correctly with a custom User model, then this will work automatically:  https://docs.djangoproject.com/en/2.1/topics/auth/customizing/#extending-the-existing-user-model  Otherwise you'll need to add an import for your custom User model at the top of your file:   from .myapp import MyCustomUserModel as User .   (Or wherever it is in your project.)   If you're using Django 1.* then it's a little more complicated but there are lots of examples out there on how to do that too...   Good luck!     Let me know if this helps... 🙂     -Brian Karr  bkarr@bkarrconsulting.com  http://www.bkarrconsulting.com      PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved...   https://docs.djangoproject.com/en/2.1/topics/signals/#defining-and-registering-signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects...     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable...   https://wiki.python.org/moin/PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting..com    http://www..bkarrconsulting..com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved...   https://docs..djangoproject..com//topics//signals//#defining--and--registering--signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects....     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable....   https:/wiki..python..org//moin//PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting....com    http:/www....bkarrconsulting....com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved.....   https:/docs.....djangoproject.....com////topics////signals////#defining----and----registering----signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects......     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable......   https:/wiki......python......org////moin////PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting.......com    http:/www.......bkarrconsulting.......com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved........   https:/docs........djangoproject........com////////topics////////signals////////#defining------and------registering------signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects.........     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable.........   https:/wiki.........python.........org////////moin////////PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian K arr    b k arr @ b k arr consulting ........ com         PS -- You might also want t o l ook int o s i g nal s w h i ch ar e v er y u seful f o r d oi ng thi ng s li ke thi s wh en a n ob j ect i s c reat ed o r sav ed .... .. . h tt p : / / doc s . djan go pr ojec t . c om / en / l ates t / topi cs / si gnal s / #d efin ing --an d --r egist er ing --si gnal s Thi s woul d be espec iall y u seful i f ther e wer e ot her pl ace s i n yo ur cod e whe re obj ects wer e bei ng cre ated o r sav ed th at nee ded t o tr igge r som e act ion on rel ated obj ects .... .. . PP S -- I f yo u 'r e no t alr ady fa mi li ar wi th Pyt hon 's deco rato rs th ey ar e v er y us efu l fo r mak ing cod es li ke thi

és fàcil i més llegible... h tt p : // w iki . pyt hon. o g/ moi n/ Py thon Deco rato rs #Wh at_ is _ a _ Deco rato r … però probablement és alguna cosa per a un altre dia 🙂 Molta sort! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp : / / www . bk arr consu lti ng .. com

Treballar amb classe

A Django, treballeu amb models per crear i gestionar les vostres dades. Un model és una representació de dades a la vostra aplicació. Els models poden ser simples o complexos, i poden contenir qualsevol tipus de dades que necessiteu.

Per crear un model a Django, feu servir la funció django model(). Aquesta funció pren dos arguments: el nom del model i una llista de camps que componen el model. Els camps es defineixen com a variables de Python que representen peces de dades del vostre model. Podeu definir camps com a cadenes o com a objectes.

Per crear una nova instància d'un model, feu servir la funció django create_model(). Aquesta funció pren el nom del model i una instància de l'objecte FieldType com a arguments. L'objecte FieldType defineix com s'han d'omplir els camps d'un model. Hi ha tres tipus d'objectes FieldType: string, enter i float. També podeu definir objectes FieldType personalitzats mitjançant la funció django field_type().

Un cop hàgiu creat un model, podeu utilitzar-lo per emmagatzemar dades a la vostra aplicació. Per fer-ho, utilitzeu la funció django save() per escriure dades a la vostra base de dades i la funció django save_all() per escriure dades a tots els models de la vostra aplicació alhora. També podeu utilitzar la funció django update() per actualitzar les dades de la vostra base de dades en funció dels canvis fets als models de la vostra aplicació.

Articles Relacionats:

Deixa el teu comentari