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模型中的角色的主要内容,如果未能解决你的问题,请参考以下文章