django模型中的角色

Posted

技术标签:

【中文标题】django模型中的角色【英文标题】:Roles in django model 【发布时间】:2019-11-16 05:11:11 【问题描述】:

我在 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】:

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

from django.conf import settings

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


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

    def __str__(self):
        return self.name

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

【讨论】:

很好的答案。这创造了如此多的可能性和灵活性。根据 Django 文档,最好将成员资格上的 user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) 替换为 user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)。

以上是关于django模型中的角色的主要内容,如果未能解决你的问题,请参考以下文章

Django:获取模型保存中的当前用户

如何在 Django 中按应用程序处理用户和角色

如何使用 Django 创建三联表

使用django自带的group表给角色分组

Django:按多对多字段订购模型

Django:实现多个用户级别/角色/类型