我想在我的查询集中添加一个与特定权限相关的附加字段,是否可以在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'未定义
答案 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