Rezolvat: django salvează alte date de clasă în timp ce salvează o clasă

Când salvează o clasă, Django salvează toate variabilele de instanță și metodele clasei. Acest lucru poate cauza probleme dacă doriți să salvați alte date de clasă în timp ce salvați clasa.

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

este mai ușor și mai adabil… . h tt p : / / w iki . pyt hon . sau g/ moi n/ Py thon Deco rato rs #Wh at_ is _ a _ Deco rato r … dar probabil că este ceva pentru o altă zi 🙂 M uc bine! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp : / / www . bk arr consu lti ng .. com

Lucrați cu clasa

În Django, lucrați cu modele pentru a vă crea și gestiona datele. Un model este o reprezentare a datelor din aplicația dvs. Modelele pot fi simple sau complexe și pot conține orice tip de date de care aveți nevoie.

Pentru a crea un model în Django, utilizați funcția django model(). Această funcție are două argumente: numele modelului și o listă de câmpuri care alcătuiesc modelul. Câmpurile sunt definite ca variabile Python care reprezintă date din modelul dvs. Puteți defini câmpurile fie ca șiruri de caractere, fie ca obiecte.

Pentru a crea o instanță nouă a unui model, utilizați funcția django create_model(). Această funcție ia drept argumente numele modelului și o instanță a obiectului FieldType. Obiectul FieldType definește modul în care câmpurile dintr-un model ar trebui să fie populate. Există trei tipuri de obiecte FieldType: șir, întreg și float. De asemenea, puteți defini obiecte FieldType personalizate folosind funcția django field_type().

Odată ce ați creat un model, îl puteți utiliza pentru a stoca date în aplicația dvs. Pentru a face acest lucru, utilizați funcția django save() pentru a scrie date în baza de date și funcția django save_all() pentru a scrie date în toate modelele din aplicația dvs. simultan. De asemenea, puteți utiliza funcția django update() pentru a actualiza datele din baza de date pe baza modificărilor aduse modelelor din aplicația dvs.

Postări asemănatoare:

Lăsați un comentariu