3

ギャラリーフィールドを書いています。ManyToManyFieldこのフィールドは、独自のajaxウィジェットなどをサブクラス化して追加します。このソリューションを可能な限りコンパクトにしたい(つまり、可能であれば、別のプロジェクトでこれを再実装するためのコードをできるだけ少なくしたい)。

ManyToManyField順序情報を保持する中間テーブル(に'から'パラメーターを提供する)を作成することにしました。

class IntermediateModel(models.Model):
    from_content_type = models.ForeignKey(ContentType)
    from_object_id = models.PositiveIntegerField()
    from_content_object = generic.GenericForeignKey('from_content_type', 'from_object_id')
    to_content_type = models.ForeignKey(ContentType)
    to_object_id = models.PositiveIntegerField()
    to_content_object = generic.GenericForeignKey('to_content_type', 'to_object_id')
    order = models.PositiveIntegerField()

次の質問が発生します。

  1. (上記のような)一般的な関係を指す両方の外部キーを持つdjangoのm2mの「スルー」モデルを持つことは可能ですか?もしそうなら-これを達成する方法は?
  2. これを行うことが可能である場合、そのようなモデルは複数のm2mフィールド間の一般的な関係を保持できますか?いいね:クラス<->中級<->学生、ギャラリー<->中級<->写真-どちらも「スルー」モデルとして中級を使用していますか?
  3. 編集:テスト済み-私はできます;) 'から'のテーブルで抽象クラスを使用できますか?私は理解しました-上記の複雑なシナリオが機能しない場合は、順序付けやその他のものを提供する2つの抽象クラスを作成し、常に通常のサブクラスを作成して実際にいくつかの関係を構築することができます:)
4

1 に答える 1

1

中間モデル間の違いが単にそれらを処理する方法である場合は、「プロキシ」モデルでそれを使用する必要があるだけかもしれません。Metaつまり、 「プロキシ」と呼ばれるオプションを使用してDjangoモデルのサブクラス化をTrue. このようにして、それらを別々に処理できますが、それらを同じデータベーステーブルに格納することができます (それが必要な場合)。

これを読んでください。多分それはあなたが望むものです。同じ構造を持つ 2 つのデータベース テーブルを持つ代わりに、2 つ (またはそれ以上) のアクセス方法と処理方法を持つ 1 つのテーブルを持つことができます。

于 2012-06-10T02:50:57.410 に答える