是否可以在Django的CASE查询集中使用“has_perm”?

时间:2016-04-27 07:29:20

标签: django django-models django-views

我想在我的查询集中添加一个与特定权限相关的附加字段,是否可以在CASE中使用“has_perm”?

var_group = Group.objects.all().annotate(mypermission=Case(
When(self.has_perm('app.mypermission'), then=Value(True)),
default=Value(False),
output_field=BooleanField(),
))

错误是:

  

全局名称'self'未定义

1 个答案:

答案 0 :(得分:1)

self未定义。您在self中使用的annotate不是Group对象。查询集用于进行SQL查询。 has_perm不是查询构建的一部分。它是Group对象方法。

所以,答案是肯定的。

var_group = Group.objects.all().annotate(mypermission=Case(
When(permissions__codename='app.permission', then=Value(True)),
default=Value(False),
output_field=BooleanField(),
))

还有另一种解决方案。我建议查询所有Group对象,然后逐个迭代它来注释它。

var_group = Group.objects.all()

for group in var_group:
    if group.permissions.filter(codename='app.permission').exists():
        group.mypermission = True
    else:
        group.mypermission = False