Django 中的关系,尤其是 ManyToMany
一直让我有些困扰。特别是,由于关系仅在其中一个模型中定义,因此您无法通过查看配对模型来判断它可能隐藏了哪些其他关系。
例如,来自 Django Documentation :
class Topping(models.Model):
# ...
class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
通过查看代码,您可以知道我会在 Pizza.toppings
中找到比萨饼的相关配料。但是你无法告诉我在 Topping.Pizza_set
中我可以告诉哪些比萨有浇头——你必须查看 Pizza
类看到这个。
因此,通过查看 Toppings
,我实际上并不知道它拥有的全部字段。
有没有办法解决这个问题或让它更明确?还是我遗漏了什么?
最佳答案
这似乎是 DRY 原则不可避免的副作用。我不知道有什么方法可以声明性地显示这些关系中的对称性(除了通过评论等方式)。如果你真的想让事情变得明确,你可以把关系放在它自己的表中(无论如何 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 的一些便利性。
关于python - 如何在接收模型端明确显示 Django ManyToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117113/