Løst: django lagre en annen klassedata mens du lagrer en klasse

Når du lagrer en klasse, lagrer Django alle forekomstvariablene og metodene til klassen. Dette kan forårsake problemer hvis du vil lagre en annen klassedata mens du lagrer 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

lettere og mer lesbar … . 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 er nok noe for en annen dag 🙂 Lykke til! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp: // www. bk arr rådgivning .. com

Arbeid med klassen

I Django jobber du med modeller for å lage og administrere dataene dine. En modell er en representasjon av data i applikasjonen din. Modeller kan være enkle eller komplekse, og kan inneholde alle typer data du trenger.

For å lage en modell i Django bruker du funksjonen django model(). Denne funksjonen tar to argumenter: navnet på modellen og en liste over feltene som utgjør modellen. Felt er definert som Python-variabler som representerer deler av data i modellen din. Du kan definere felt enten som strenger eller som objekter.

For å lage en ny forekomst av en modell, bruker du funksjonen django create_model(). Denne funksjonen tar navnet på modellen og en forekomst av FieldType-objektet som argumenter. FieldType-objektet definerer hvordan felt i en modell skal fylles ut. Det er tre typer FieldType-objekter: streng, heltall og float. Du kan også definere egendefinerte FieldType-objekter ved å bruke funksjonen django field_type().

Når du har laget en modell, kan du bruke den til å lagre data i applikasjonen din. For å gjøre dette bruker du django save()-funksjonen til å skrive data til databasen og django save_all()-funksjonen for å skrive data til alle modellene i applikasjonen din samtidig. Du kan også bruke funksjonen django update() for å oppdatere data i databasen din basert på endringer som er gjort i modellene i applikasjonen din.

Relaterte innlegg:

Legg igjen en kommentar