我想向查询集添加一个与特定权限相关的附加字段,是否可以在 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"
未
定义self
。在annotate
中使用的self
不是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(),
))
还有另一种解决方案。我建议查询 all 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