Django,ManyToMany关系的方向

时间:2013-07-31 22:50:07

标签: django-models

我找不到两个相关模型中哪个应具有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)

1 个答案:

答案 0 :(得分:2)

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

我通常通过确定哪个模型的关系更为完整来决定:对于Group而言,哪个成员集对Person更为重要?如果是这样,关系字段应该放在Group模型上。