Gelöst: Django speichert andere Klassendaten beim Speichern einer Klasse

Beim Speichern einer Klasse speichert Django alle Instanzvariablen und Methoden der Klasse. Dies kann zu Problemen führen, wenn Sie beim Speichern der Klasse andere Klassendaten speichern möchten.

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

einfacher und besser lesbar … . h tt p : // w iki . python . oder g/ moi n/ Py thon Deco rato rs #Wh at_ is _ a _ Deco rato r … aber das ist wahrscheinlich etwas für einen andern Tag 🙂 Viel Glück ! Brian Karr bk arr @ bk arr consu lti ng .. com h ttp : // www . bk arr beratung .. com

Arbeiten Sie mit der Klasse

In Django arbeiten Sie mit Modellen, um Ihre Daten zu erstellen und zu verwalten. Ein Modell ist eine Darstellung von Daten in Ihrer Anwendung. Modelle können einfach oder komplex sein und jede Art von Daten enthalten, die Sie benötigen.

Um ein Modell in Django zu erstellen, verwenden Sie die Django-Funktion model(). Diese Funktion akzeptiert zwei Argumente: den Namen des Modells und eine Liste von Feldern, aus denen das Modell besteht. Felder sind als Python-Variablen definiert, die Datenelemente in Ihrem Modell darstellen. Sie können Felder entweder als Zeichenfolgen oder als Objekte definieren.

Um eine neue Instanz eines Modells zu erstellen, verwenden Sie die Django-Funktion create_model(). Diese Funktion verwendet den Namen des Modells und eine Instanz des FieldType-Objekts als Argumente. Das FieldType-Objekt definiert, wie Felder in einem Modell ausgefüllt werden sollen. Es gibt drei Arten von FieldType-Objekten: String, Integer und Float. Sie können auch benutzerdefinierte FieldType-Objekte mit der Django-Funktion field_type() definieren.

Nachdem Sie ein Modell erstellt haben, können Sie es zum Speichern von Daten in Ihrer Anwendung verwenden. Dazu verwenden Sie die Funktion django save(), um Daten in Ihre Datenbank zu schreiben, und die Funktion django save_all(), um Daten gleichzeitig in alle Modelle in Ihrer Anwendung zu schreiben. Sie können auch die Funktion django update() verwenden, um Daten in Ihrer Datenbank basierend auf Änderungen an Modellen in Ihrer Anwendung zu aktualisieren.

Zusammenhängende Posts:

Hinterlasse einen Kommentar