Risolto: django salva i dati di un'altra classe durante il salvataggio di una classe

Quando si salva una classe, Django salva tutte le variabili di istanza e i metodi della classe. Ciò può causare problemi se si desidera salvare i dati di un'altra classe durante il salvataggio della classe.

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

Più facile e più leggibile … . h tt p : / / w iki . pyt hon. o g/ moi n/ Py thon Deco rato rs #Cos'è_ un _ Deco rato r … ma probabilmente è qualcosa per un altro giorno 🙂 Buona fortuna! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp : / / www . bk arr consu lti ng .. com

Lavora con classe

In Django lavori con i modelli per creare e gestire i tuoi dati. Un modello è una rappresentazione dei dati nella tua applicazione. I modelli possono essere semplici o complessi e possono contenere qualsiasi tipo di dati di cui hai bisogno.

Per creare un modello in Django, si utilizza la funzione django model(). Questa funzione accetta due argomenti: il nome del modello e un elenco di campi che compongono il modello. I campi sono definiti come variabili Python che rappresentano pezzi di dati nel tuo modello. È possibile definire i campi come stringhe o come oggetti.

Per creare una nuova istanza di un modello, si utilizza la funzione django create_model(). Questa funzione accetta come argomenti il ​​nome del modello e un'istanza dell'oggetto FieldType. L'oggetto FieldType definisce come devono essere popolati i campi in un modello. Esistono tre tipi di oggetti FieldType: string, integer e float. Puoi anche definire oggetti FieldType personalizzati utilizzando la funzione django field_type().

Dopo aver creato un modello, puoi utilizzarlo per archiviare i dati nella tua applicazione. Per fare ciò, usi la funzione django save() per scrivere i dati nel tuo database e la funzione django save_all() per scrivere i dati in tutti i modelli nella tua applicazione contemporaneamente. Puoi anche utilizzare la funzione django update() per aggiornare i dati nel tuo database in base alle modifiche apportate ai modelli nella tua applicazione.

Related posts:

Lascia un tuo commento