Django 加入查询权限和组?
Django join query for permissions and group?
我想以某种方式加入一个拥有我所有权限的群组。
我想查询所有权限,并为每个权限查询一个布尔指示器(如果组有的话)。
所以假设这个
group = Group.objects.get(pk=1) # specific group
Permission.objects.all().annotate(群里有??)
group.permissions.all()
没有用,因为我想查询所有权限。
更新:
明确解释:
假设我的权限 table 是(pk 值):1、2、3 - 总共三行。
组table:pk=1的一组。
组权限(多对多)table:具有 pk 1 的组,具有权限 1,2(所以两行)
我想显示所有权限,并在它们附近显示该组是否拥有权限。
所以在我们的例子中我应该得到:
1 正确
2 正确
3 错
因为该组没有 pk=3 的权限。
我认为以下查询适合您
from django.db.models import Case, When, BooleanField
group_name = 'your group name'
Permission.objects.annotate(
has_perm=Max(Case(
When(group__name=group_name, then=1),
default=0,
output_field=BooleanField()
))
).values_list('name', 'has_perm').order_by('has_perm')
Conditional expressions were introduced in Django 1.8, and aggregation (annotate) 也有详细记录。
我想以某种方式加入一个拥有我所有权限的群组。 我想查询所有权限,并为每个权限查询一个布尔指示器(如果组有的话)。 所以假设这个
group = Group.objects.get(pk=1) # specific group
Permission.objects.all().annotate(群里有??)
group.permissions.all()
没有用,因为我想查询所有权限。
更新:
明确解释:
假设我的权限 table 是(pk 值):1、2、3 - 总共三行。
组table:pk=1的一组。
组权限(多对多)table:具有 pk 1 的组,具有权限 1,2(所以两行)
我想显示所有权限,并在它们附近显示该组是否拥有权限。
所以在我们的例子中我应该得到:
1 正确
2 正确
3 错
因为该组没有 pk=3 的权限。
我认为以下查询适合您
from django.db.models import Case, When, BooleanField
group_name = 'your group name'
Permission.objects.annotate(
has_perm=Max(Case(
When(group__name=group_name, then=1),
default=0,
output_field=BooleanField()
))
).values_list('name', 'has_perm').order_by('has_perm')
Conditional expressions were introduced in Django 1.8, and aggregation (annotate) 也有详细记录。