当关系包含属性时,如何在django中实现Many to many关系?

问题描述 投票:0回答:1

我是django的初学者,我知道你可以使用ManyToManyField来连接两个模型,比如作者-帖子-用户-组。UML Example

我怎样才能在我的代码中实现这个功能呢?

class User(models.Model):
# user fields

class Group(models.Model):
     # group fields

class GroupMember(models.Model):
    group = models.ForeignKey(Group, on_delete=models.DO_NOTHING, db_index=True)
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING, db_index=True)
    IsAdmin = models.BooleanField(default=False, verbose_name='Est un admin')

    class Meta:
        unique_together = (("group", "user"),)

我想使用ManyToManyFields,这样我就可以在它们之间进行引用(如果我没有IsAdmin字段,我就不必创建第三个类'GroupMember')。

django django-models many-to-many uml
1个回答
3
投票

你可以从官方文档中找到这个例子。https:/docs.djangoproject.comen3.0topicsdbmodels#extra-fields-on-many-to-many-relationships

中间模型与ManyToManyField相关联,使用的是 通过 参数来指向将作为中介的模型。

你的模型中的Group类应该是这样的。

class Group(models.Model):
    # group fields
    # ...
    users = models.ManyToManyField(User, through='GroupMember')
© www.soinside.com 2019 - 2024. All rights reserved.