我正在尝试模拟群组成员与他们所属群组之间的双向关系。
更具体地说,我想建模这样的东西:
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'
实现这一目标的最佳方式是什么?
答案 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上的文档以获取更多示例。