python - 如何在接收模型端明确显示 Django ManyToMany 关系

标签 python django django-models

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/

相关文章:

python - 使用 Azure-Monitoring-libraries-for-python 监视 Azure-Monitor 中的 azure-resources 并获取这些指标

python - 让 python 3.4 找到我的自定义包

python - 在python中解析文件

重建索引时,带有 Elasticsearch 的 Django haystack 找不到数据库

django - 我可以拥有一个对自身具有外键引用的 Django 模型吗?

python - 计时器对象返回参数Nº错误

python - 将 django View 转换为 django Rest Framework APIView

python - Django 自定义表单字段初始数据

python - 如何在 Django 管理界面中显示向后引用的模型实例?

Django 存储匿名用户数据