Django的人际关系,尤其是ManyToMany
,总是让我有些困扰。特别是,由于关系仅在其中一个模型中定义,因此从成对模型中看不出它可能隐藏了哪些其他关系。
例如,从Django Documentation:
class Topping(models.Model):
# ...
class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
从代码中可以看出,我可以在
Pizza.toppings
找到比萨饼的相关配料。但你不能说我能告诉你什么比萨饼在Topping.Pizza_set
有一个顶部-你必须看看Pizza
类才能看到这一点。因此,通过查看
Toppings
,我实际上不知道它拥有的字段的完整范围。有什么办法可以解决这个问题或者让它更明确?或者是我遗漏了什么?
最佳答案
这似乎是干原则不可避免的副作用。我不知道用什么方式来说明这些关系中的对称性(除了注释之类的)。如果你真的想把事情说清楚,你可以把关系放在它自己的表中(Django在幕后做的事情),比如:
class Topping(models.Model):
# ...
class Pizza(models.Model):
# ...
class PizzaToppings(models.Model):
# '+' disables the reverse relationship
pizza = models.ForeignKey(Pizza, related_name='+')
topping = models.ForeignKey(Topping, related_name='+')
... 当然,你会失去一些ORM的便利。