如何在Django选择字段

时间:2016-03-21 23:23:54

标签: python django

我们说我有这样的模型:

User:
    name
    role

它的角色可以采用以下值:

  • 编辑
  • 主管
  • 顾问

由于用户可以拥有一个,两个或所有角色,因此我选择以位掩码的形式实现此功能,其中角色可以采用以下值:

  • 编辑:1
  • 主管:2
  • 顾问:4

或者它们的任何组合:

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

1 个答案:

答案 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)