Löst: django spara en annan klassdata samtidigt som du sparar en klass

När du sparar en klass, sparar Django alla instansvariabler och metoder för klassen. Detta kan orsaka problem om du vill spara en annan klassdata medan du sparar klassen.

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

det är lättare och mer läsbart … . h tt p: //w iki. pyt hon. or g/ moi n/ Py thon Deco rato rs #What at_ is _ a _ Deco rato r … men det är förmodligen något för en annan dag 🙂 Lycka till! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp: // www. bk arr consu lti ng .. com

Arbeta med klass

I Django arbetar du med modeller för att skapa och hantera din data. En modell är en representation av data i din applikation. Modeller kan vara enkla eller komplexa och kan innehålla vilken typ av data du behöver.

För att skapa en modell i Django använder du funktionen django model(). Denna funktion tar två argument: namnet på modellen och en lista över fält som utgör modellen. Fält definieras som Python-variabler som representerar bitar av data i din modell. Du kan definiera fält antingen som strängar eller som objekt.

För att skapa en ny instans av en modell använder du funktionen django create_model(). Denna funktion tar namnet på modellen och en instans av FieldType-objektet som sina argument. FieldType-objektet definierar hur fält i en modell ska fyllas i. Det finns tre typer av FieldType-objekt: sträng, heltal och flytande. Du kan också definiera anpassade FieldType-objekt med funktionen django field_type().

När du har skapat en modell kan du använda den för att lagra data i din applikation. För att göra detta använder du funktionen django save() för att skriva data till din databas och funktionen django save_all() för att skriva data till alla modeller i din applikation samtidigt. Du kan också använda funktionen django update() för att uppdatera data i din databas baserat på ändringar som gjorts i modeller i din applikation.

Relaterade inlägg:

Lämna en kommentar