我有两个模型“用户”和“角色”。榜样是这样的:
class Role(models.Model):
ADMIN = 1
INFORMATIC = 2
REFEREE = 3
SPONSER = 4
STAFF = 5
PLAYER = 6
CUSTOMER =7
VISITOR = 8
ROLE_CHOICES = (
(1, 'admin'),
(2, 'informatic'),
(3, 'referee'),
(4, 'sponser'),
(5, 'staff'),
(6, 'player'),
(7, 'customer'),
(8, 'visitor'),
)
id = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, primary_key=True ,
default=VISITOR)
这是我的用户模型:
class User(AbstractBaseUser,PermissionsMixin):
username = models.CharField(max_length=150, unique=True, blank=True , null=True,)
password = models.CharField(max_length=100, null=True , blank=True)
roles = models.ManyToManyField(Role)
现在我已经创建了一些角色对象和一些用户,并将一些角色分配给了一些用户。现在我想知道如何确定哪个用户具有哪些角色?从请求我有用户。我想知道某个用户是否具有某个角色(例如,赞助者)并授予他一些权限。 我该如何检查?
编辑 当我使用usrobj.roles.filter()时,它返回如下内容:
<QuerySet [<Role: (2, 'informatic')>, <Role: (3, 'referee')>]>
并使用userobj.roles.filter(id = 1)返回如下:
<QuerySet [<Role: (2, 'informatic')>]>
显然这不是我想要的
答案 0 :(得分:2)
您可以直接查询角色并检查.exists()
:
request.user.roles.filter(id=1).exists()
(注意,我真的不建议在角色模型中使用ID作为选择。使用单独的role
字段。)
答案 1 :(得分:1)
例如,如果您想知道某人是否是管理员:
在视图中:
admin_role = Role.objects.get(id=1)
admin_users = User.objects.filter(roles__in=admin_role)
# To check if a user is admin
if admin_role in user.roles.all():
pass
祝你好运!