【问题标题】:Roles in django modeldjango模型中的角色
【发布时间】: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

【问题讨论】:

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


    【解决方案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)。
    猜你喜欢
    • 2021-02-17
    • 2016-03-16
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    相关资源
    最近更新 更多