Django组和组成员之间的双向关系

时间:2016-09-09 20:43:06

标签: django models

我正在尝试模拟群组成员与他们所属群组之间的双向关系。

更具体地说,我想建模这样的东西:

class Member(models.Model):
    name = models.CharField(max_length=50)
    my_group = models.ForeignKey('Group')
    #leader = models.BooleanField()

class Group(models.Model):
    name = models.CharField(max_length=50)
    leader = models.ForeignKey('Member')

所以我希望每个成员都链接到一个组。但是每个小组都应该有一个领导者。我通常会添加一个“leader”属性来为一个组分配一个领导者或添加一个额外的模型/表。但是,我希望能够从Django Admin界面中的特定组的成员列表中选择领导者,并且上述尝试当然会导致错误,因为这两个模型相互引用。

这是错误:

ERRORS: app1.Group.leader: (fields.E303) Reverse query name for 'Group.leader' clashes with field name 'Member.my_group'. HINT: Rename field 'Member.my_group', or add/change a related_name argument to the definition for field 'Group.leader'

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用名为 Membership 的中间模型来定义成员资格级别

模型:

class Member(models.Model):
    name = models.CharField(max_length=50)
    # may be a relations to User here


class Group(models.Model):
    name = models.CharField(max_length=50)
    members = models.ManyToManyField(Member, through=Membership)


class Membership(models.Model):
    group = models.ForeignKey(Group)
    members = models.ForeignKey(Member)
    # member level
    is_leader = models.BooleanField(default=False)

您可以查看ManyToMany fields上的文档以获取更多示例。