【问题标题】:Django, Direction of ManyToMany relationsDjango,多对多关系的方向
【发布时间】:2013-07-31 22:50:07
【问题描述】:

我找不到两个相关模型中哪一个应该具有 M2M 字段的逻辑?这是 Django 教程中的一个示例

class Person(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

如果我在 Person 而不是 Group 中定义 M2M 字段会有什么不同?

class Person(models.Model):
    name = models.CharField(max_length=128)
    groups = models.ManyToManyField(Person, through='Membership')

class Group(models.Model):
    name = models.CharField(max_length=128)

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

【问题讨论】:

    标签: django-models


    【解决方案1】:

    从技术上讲,您可以在任一模型上添加 ManyToManyField 并获得相同的结果,因此决定通常取决于哪个模型更有意义,这通常是一个非常主观的决定。

    我通常通过确定关系更完整的模型来决定:成员集对Group 比组集对Person 更重要吗?如果是这样,关系字段应该在Group 模型上。

    【讨论】:

    • 我的模型之一是用户,因此尽管它是用户拥有的一组对象,但修改新模型比修改用户更容易。这是一个很好的理由吗?
    • @Kiarash,是的,这是另一个好点。如果您正在处理 Django 内置的模型或您不想更改的 3rd 方应用程序提供的模型,实用性胜过一切,您应该在方便的地方添加关系。
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多