Django模型中的角色

时间:2019-07-05 14:45:46

标签: python django database django-models many-to-many

我在Django中有一个模型,其中有多个角色-普通用户,管理员和管理员。他们每个人都可以做其他事情。以下型号可以正常工作吗?

class Team(models.Model):
    name = models.CharField('Name', max_length=128)
    users = models.ManyToManyField(User)
    admins = models.ManyToManyField(User)
    managers = models.ManyToManyField(User)

    def __str__(self):
        return self.name

1 个答案:

答案 0 :(得分:1)

这可能有效。如果角色数量很大或动态(例如,可以添加,删除,重命名,更新角色)。您可以引入三元关系,例如:

django.contrib.auth import get_user_model

class Role(models.Model):
    name = models.CharField(max_length=128)


class Team(models.Model):
    name = models.CharField('Name', max_length=128)
    members = models.ManyToManyField(get_user_model(), through='Membership')

    def __str__(self):
        return self.name

class Membership(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    role = models.ForeignKey(Role, on_delete=models.PROTECT)