Django有很多很多关系

时间:2017-12-12 12:08:24

标签: django django-models

我有一个用户模型和一个组模型。

 from django.contrib.auth.models import AbstractUser

 class Group(models.Model):
    name = models.CharField(max_length=200)

 class User(AbstractUser):
    name = models.CharField(max_length=200)
    group = models.ManyToManyField('Group')

我有一个用户可以是管理员或只是组成员的场景。一个组可以有很多管理员,也可以有很多成员。 如何在Django中定义这样的关系并查询“组的管理员”,“组成员”,“用户是管理员的组”,“用户所属的组”等内容

1 个答案:

答案 0 :(得分:3)

您应该使用'到'参数'很好的中间模型。

class Group(models.Model):
    name = models.CharField(max_length=200)
    members = models.ManyToManyField(User, through='GroupMembership', related_name='groups')

class GroupMembership(models.Model):
    ROLE_CHOICE = (
        ('1', 'Admin'),
        ('2', 'Member'),
    )
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    role = models.CharField(choices=ROLE_CHOICE, default='2', max_length=1)

“小组”中的所有成员

group.members.all()

'group'的所有管理员

group.members.filter(groupmembership__role=1)

“john”为admin的所有群组

Group.objects.filter(members__name='john', groupmembership__role=1)

'user'为admin的群组

user.groups.filter(groupmembership__role=1)