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



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

相关内容

最新更新