Rešeno: django med shranjevanjem razreda shrani podatke drugega razreda

Ko shranjuje razred, Django shrani vse spremenljivke in metode razreda. To lahko povzroči težave, če želite med shranjevanjem razreda shraniti podatke drugega razreda.

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

lažji in bolj berljiv …. h tt p: // w iki. pyt hon . ali g/ moi n/ Py thon Deco rators #Wh at_ is _ a _ Deco rato r … ampak to je verjetno nekaj za ali drug njen dan 🙂 Srečno! Bria n Karr bk arr @ bk arr svetovanje .. com h ttp: // www. bk arr consu lti ng .. com

Delo z razredom

V Djangu delate z modeli za ustvarjanje in upravljanje svojih podatkov. Model je predstavitev podatkov v vaši aplikaciji. Modeli so lahko preprosti ali zapleteni in lahko vsebujejo poljubno vrsto podatkov, ki jih potrebujete.

Če želite ustvariti model v Djangu, uporabite funkcijo django model(). Ta funkcija sprejme dva argumenta: ime modela in seznam polj, ki sestavljajo model. Polja so definirana kot spremenljivke Python, ki predstavljajo dele podatkov v vašem modelu. Polja lahko definirate kot nize ali kot predmete.

Če želite ustvariti nov primerek modela, uporabite funkcijo django create_model(). Ta funkcija vzame ime modela in primerek predmeta FieldType kot svoje argumente. Objekt FieldType določa, kako naj bodo polja v modelu izpolnjena. Obstajajo tri vrste objektov FieldType: niz, celo število in plavajoče. Prav tako lahko definirate objekte FieldType po meri s funkcijo django field_type().

Ko ustvarite model, ga lahko uporabite za shranjevanje podatkov v vaši aplikaciji. Če želite to narediti, uporabite funkcijo django save() za pisanje podatkov v vašo bazo podatkov in funkcijo django save_all() za pisanje podatkov v vse modele v vaši aplikaciji hkrati. Uporabite lahko tudi funkcijo django update() za posodobitev podatkov v vaši bazi podatkov na podlagi sprememb modelov v vaši aplikaciji.

Podobni objav:

Pustite komentar