中间模型中的 ManyToManyField 或 ForeignKeys?

时间:2021-05-23 21:29:01

标签: django

如果我将(或可能)沿多对多关系存储额外信息,我不明白为什么要使用 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 ??有什么好处?谢谢。

1 个答案:

答案 0 :(得分:1)

<块引用>

如果我将(或可能)沿多对多关系存储额外信息,我不明白为什么要使用 ManyToManyField

您不需要这样做。但它使查询更有效。事实上,您现在可以查询:

Group.objects.filter(members=some_person)

这比使用更短、更具描述性:

Group.objects.filter(membership__person=some_person)

因此,这是从 Group 模型到 Person 模型的“编码捷径”,反之亦然。