如果我将(或可能)沿多对多关系存储额外信息,我不明白为什么要使用 ManyToManyField。
doc here 显示了这个例子:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(
Person,
through='Membership',
through_fields=('group', 'person'),
)
class Membership(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
inviter = models.ForeignKey(
Person,
on_delete=models.CASCADE,
related_name="membership_invites",
)
invite_reason = models.CharField(max_length=64)
如果开发人员已经定义了关系模型并定义了外键,为什么还要在那里设置成员字段? :D 为什么不遗漏成员 ManyToManyField ??有什么好处?谢谢。
答案 0 :(得分:1)
如果我将(或可能)沿多对多关系存储额外信息,我不明白为什么要使用 ManyToManyField
。
您不需要这样做。但它使查询更有效。事实上,您现在可以查询:
Group.objects.filter(members=some_person)
这比使用更短、更具描述性:
Group.objects.filter(membership__person=some_person)
因此,这是从 Group
模型到 Person
模型的“编码捷径”,反之亦然。