0

時間の経過とともにモデルが大きくなりすぎることがあります。それをいくつかのモデルに分割し、それらをに接続したいという要望がありますOneToOneField。最も頻繁に使用するフィールドはプライマリモデルに保持され、他のフィールドは他のモデルに移動します。

ただし、このアプローチは、モデルの新しいインスタンスを作成するときに頭痛の種になります。1つのモデルを1行で初期化できる場合:

MyModel.objects.create(foo = 1、bar = 2)

2つのモデルを初期化するには、少なくとも2行必要です。

インスタンス=MyModel.objects.create(foo = 1、bar = 2)
MyRelatedModel.objects.create(mymodel = instance、hello = 3、world = 4)

1行に2つのモデルを作成する方法はありますか、またはそのような問題に対して独自の補助関数を作成する必要がありますか?

4

1 に答える 1

1

次の理由から、モデルをonetooneFieldで分割しないでください。

  • あなたが言ったように、それらを管理するためのいくつかの追加のコードがあります。
  • それらをクエリするたびに、2つではなく2つのクエリを実行する必要があります。

djangoモデルには2つの機能があることを忘れないでください。データ関連のメソッドを保持し、アプリケーションのデータモデルを保持します。一部のビジネスモデルには、数百のフィールドを持つテーブルがあります。これは完全に正常です。あなたが本当にそれらを分割したい場合。抽象基本クラスを確認することをお勧めします。これらはモデルの基本クラスであり、それ自体に個別のテーブルはありませんhttps://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

ただし、oneToOneフィールドを使用する場合は、次のようなモデルのメソッドの1つでオブジェクト作成コードをラップできます。

MyMode.create(attr_for_model_A=1, attr_for_model_B=2)

または、デフォルトのマネージャーのcreateメソッドを上書きして、1つではなく2つのメソッドを作成することもできます https://docs.djangoproject.com/en/dev/topics/db/managers/#modifying-initial-manager-querysets

私の意見では、それらのうちの1つ以外は小さなモデルコードを持つ価値があります。

于 2012-09-25T05:47:44.870 に答える