gpt4 book ai didi

python - 如何在 Django 选择字段中实现位掩码

转载 作者:行者123 更新时间:2023-12-05 07:50:27 24 4
gpt4 key购买 nike

假设我有这样一个模型:

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

最佳答案

你确定你需要位掩码吗? Django 中通常的方法是创建 3 个 bool 字段。

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)

关于python - 如何在 Django 选择字段中实现位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36143498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com