2012-04-23 31 views
1

中間テーブルに余分なフィールドが必要な場合、多対多の関係でDjangoドキュメントを読むと、得られるものはわかりませんそれぞれのモデルの中間モデルに対する外部キーを持つだけの多対多の関係を定義することによって、ここでの例では、例えばDjango:1対多の対2xの多対多

、:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

なぜのManyToManyFieldラインを気に?それはあなたが関係を何か異なって参照することを可能にしますか?それは管理者の何かを変えますか?

答えて

1

なぜManyToManyField lineを気:M2M分野はModelAdminまたはModelForm(、デフォルトのウィジェットを除く宣言フィールド)のような多くのモデルフィールドのインターフェースに便利ですジャンゴfieldsです。また、管理者にアクセスしやすいM2MマネージャやM2Mの自動保存といったヘルパーメソッドも生成します。

ここでは、フィールドが管理パネルで自動的に実行される内容の簡単な例を示します。メインオブジェクトを保存せずにスルーモデルを保存することはできません。メインオブジェクトが自動的に保存された後、管理者はこの動作をsave_m2mで処理します。 m2mフィールドを使用しなかった場合は、この種のロジックを自分でコーディングする必要があります。

あなたのプロジェクトがm2mフィールドで動作するときにこのフィールドを使用すると思いますが、ほんの少量の追加情報が必要です。そうすれば、あなたのコードは典型的なm2m関係と事実上同じですが、必要なときに余分な情報を問い合わせることができます。

それ以外の場合は、単なる「DATE_ADDED」フィールドを追加すると、管理ウィジェット、save_modelフック、のModelForm表現などを書く必要になる

あなたはそれがどんなをすることはありませんモデルを通じてでM2M行を削除する権利のにねm2mfield機能をデフォルトのForeignKeyリバース・マネージャーに置き換えることができます。

model.m2m_through_set.all() # this would work 
model.m2m_through_set.create(target=target_instance)