Django ORM 注释 : Most common group of user queryset

标签 django django-models orm

我有一个 auth.User 模型的 QuerySet。

我想知道:哪些组包含最多这些用户。

示例:我有三个组,这些用户:

  • g1:u1 u2 u3 u4
  • g2:u1 u2
  • g3:u1 u4 u5 u6
  • g4:u5 u6 u7

  • 用户查询集:u1 u2 u3

    结果(计算给定用户查询集中的成员):
  • g1:计数 3
  • g2:计数 2
  • g3:计数 1
  • g4:计数 0

  • 如何使用 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/

    相关文章:

    php - Symfony 原则连接表

    sql - Django:将自定义原始 SQL 插入与 executemany 和 MySQL 结合使用

    django - 获取聚合中最大记录的 ID

    python - 搜索 Django 中的抽象基类与具体(多表)继承

    django - 使用 Django Rest Framework 时在哪里执行附加操作

    Django 不会在 Postgres 上创建 ImageField

    Django 单元测试的 : How to set up temporary view with temporary url conf for unittest's

    python - 另一个模式中的 Django 外键

    node.js - 我怎样才能 Jest 用 es6(没有 typescript )模拟 Prisma 客户端?

    postgresql - Doctrine2 使我对 OneToMany 和 ManyToOne 关系感到疯狂