我有一个 auth.User 模型的 QuerySet。
我想知道:哪些组包含最多这些用户。
示例:我有三个组,这些用户:
用户查询集:u1 u2 u3
结果(计算给定用户查询集中的成员):
如何使用 Django 1.8 获得模型组的带注释的 QuerySet?
用例
显示每个组有多少用户名中带有“x”的成员。
SQL
SELECT auth_group.id, auth_group.name,
(SELECT COUNT(auth_user_groups.id) FROM auth_user_groups WHERE
auth_user_groups.group_id = auth_group.id AND
auth_user_groups.user_id IN (SELECT auth_user.id FROM auth_user WHERE username LIKE '%x%')) AS user_cnt
FROM auth_group ORDER BY user_cnt DESC;
更新
群
g4
没有匹配的成员,但它应该在带注释的 QuerySet 中。
最佳答案
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())),
)
关于Django ORM 注释 : Most common group of user queryset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35863762/