我有一个auth.User模型的QuerySet。
我想知道:哪些群组包含了大部分这些用户。
示例:我有三个用户组:
User-QuerySet:u1 u2 u3
结果(计算给定用户查询集中的成员):
如何使用Django 1.8获取模型Group的带注释的QuerySet?
使用案例
显示有多少成员使用" x"在每个组的用户名中。
SQL
g4
更新
组{php}
没有匹配的成员,但它应该在带注释的QuerySet中。
答案 0 :(得分:7)
from django.db.expressions import Case, When
from django.db.models import Count, IntegerField
Group.objects.annotate(
user_cnt=Count(Case(When(user__in=user_list, then=1),
output_field=IntegerField())),
)
答案 1 :(得分:1)
list_group = []
for grp in Group.objects.filter(id__in = [g1, g2, g3, g4]):
print grp, '---', User.objects.filter(id__in = [u1, u2, u3], groups = grp).count()
list_group([grp, User.objects.filter(id__in = [u1, u2, u3], groups = grp).count()])
希望这个答案是可以接受的。
答案 2 :(得分:0)
在Django中,我们可以根据values
对某个对象进行分组,我们可以在分组结果上应用annotation
。
阅读此link,它将解释如何使用值和注释。
group = Group.objects.filter(id=XX).values("user").annotate(Count("user__pk"))
如果只需要群组下的用户,则表示:
group = Group.objects.annotate(Count("user__pk"))