我希望有人能指出我用最 Djangoic 的方式来表示以下与模型的一般关系,以便 Django 的现有逻辑自然地强制执行这种关系。
事物 A 和事物 B 都具有多种类型之一。事物 A 可以与许多、一个或没有事物 B 相关,反之亦然(以对称方式),但是当且仅当它们共享相同的类型时,事物 A 和事物 B 才能相关。
我目前的实现是拥有三个模型,A、B 和 Type,其中 As 和 Bs 有 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 的事实。我可以在我控制的视图中使用过滤逻辑,但是在我控制较少的地方,比如在 Admin 中,Django 让我将 As 映射到不同类型的 B。有没有另一种方式来表示 Django 中的 As、Bs 和 Types 之间的关系?