解決済み: django は、クラスの保存中に別のクラス データを保存します

クラスを保存するとき、Django はクラスのすべてのインスタンス変数とメソッドを保存します。 これは、クラスの保存中に別のクラス データを保存する場合に問題を引き起こす可能性があります。

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

より簡単に、そしてより読みやすく… . h tt p : // w iki . ピトンホン。 または g/ moi n/ Py thon Deco rators #What at_ is _ a _ Deco rator … しかし、それはおそらく別の日のための何かです 🙂 頑張ってください ! Brian n Karr bk arr @ bk arr コンサルティング .. com h ttp : // www . bk arr コンサルティング .. com

クラスの操作

Django では、モデルを操作してデータを作成および管理します。 モデルは、アプリケーション内のデータの表現です。 モデルは単純でも複雑でもよく、必要なあらゆるタイプのデータを含めることができます。

Django でモデルを作成するには、django model() 関数を使用します。 この関数は、モデルの名前とモデルを構成するフィールドのリストの XNUMX つの引数を取ります。 フィールドは、モデル内のデータを表す Python 変数として定義されます。 フィールドは文字列またはオブジェクトとして定義できます。

モデルの新しいインスタンスを作成するには、django create_model() 関数を使用します。 この関数は、モデルの名前と FieldType オブジェクトのインスタンスを引数として取ります。 FieldType オブジェクトは、モデル内のフィールドにデータを入力する方法を定義します。 FieldType オブジェクトには、string、integer、float の XNUMX 種類があります。 django field_type() 関数を使用してカスタム FieldType オブジェクトを定義することもできます。

モデルを作成したら、それを使用してアプリケーションにデータを格納できます。 これを行うには、django save() 関数を使用してデータベースにデータを書き込み、django save_all() 関数を使用してアプリケーション内のすべてのモデルに一度にデータを書き込みます。 また、django update() 関数を使用して、アプリケーションのモデルに加えられた変更に基づいてデータベースのデータを更新することもできます。

関連記事:

コメント