我们说我有这样的模型:
User:
name
role
它的角色可以采用以下值:
由于用户可以拥有一个,两个或所有角色,因此我选择以位掩码的形式实现此功能,其中角色可以采用以下值:
或者它们的任何组合:
editor and consultant: 5 # (permission bits 1+4)
当然,如果我想知道用户是否设置了某个角色,我可以调用它的has_role
方法:
def has_role(self, role):
return not self.role & role is 0
但是,我不知道我可以使用什么Django小部件或如何为此目的制作一个小部件,我唯一知道的是我可以在模型的字段中使用choices关键字限制其选项,但它不允许我合并多个选项。
我该如何实现?
模型如下:
class User(models.Model):
ROLES = (
(1, 'editor'),
(2, 'supervisor'),
(4, 'consultant'),
)
name = models.CharField(max_length=200)
role = models.IntegerField(choices=ROLES)
def has_role(self, role):
return not self.role & role is 0
我正在使用django 1.9和python 3.5
答案 0 :(得分:0)
你确定你需要一个位掩码吗? Django的常用方法是创建3个布尔字段。
class User(models.Model):
name = models.CharField(max_length=200)
is_editor = models.BooleanField(default=False)
is_supervisor = models.BooleanField(default=False)
is_consultant = models.BooleanField(default=False)