【问题标题】:Django two-way relationship between group and group membersDjango组和组成员之间的双向关系
【发布时间】:2016-09-09 20:43:05
【问题描述】:

我试图在组成员和他们所属的组之间建立双向关系。

更具体地说,我想像这样建模:

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')

所以我希望每个成员都链接到一个组。但是每个小组都应该有一个领导者。我通常会添加一个“领导者”属性来为组分配领导者或添加额外的模型/表。但是,我希望能够从 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'

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

【问题讨论】:

  • 一个用户可以属于多个组吗?
  • 你用的是什么版本的django?
  • 没有一个用户只能在一个组中。我正在使用 Django 1.10.1

标签: django models


【解决方案1】:

您可以使用名为 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 上的文档以获取更多示例。

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2012-08-26
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多