Django の既存のロジックが自然に関係を強制するように、誰かがモデルとの次の一般的な関係を表す最も Djangoic な方法を教えてくれることを願っています。
モノ A とモノ B は両方とも、多くのタイプの 1 つを持っています。モノ A は、多くのモノ、1 つ、またはまったくモノ B に関連付けることができ、またその逆も (対称的に) 行うことができますが、モノ A とモノ B は、それらが同じタイプを共有している場合にのみ関連付けることができます。
私の現在の実装では、A、B、および Type の 3 つのモデルを使用します。ここで、As と B は Type への外部キーを持ち、A は B との m2m を持ちます。
class A(models.Model):
b = models.ForeignKey(B)
typ = models.ManyToManyField(Type)
class B(models.Model):
a = models.ForeignKey(A)
class Type(models.Model):
name = models.CharField()
これにより、やりたいことを実行できますが、A が別のタイプの B を持つことができないという事実は強制されません。制御するビューでフィルタリング ロジックを使用できますが、管理者のようにあまり制御できないところでは、Django を使用して As をさまざまなタイプの B にマップできます。Django で As、B、Types の関係を表す別の方法はありますか?