【问题标题】:Django Query Related Field CountDjango 查询相关字段计数
【发布时间】:2011-09-25 10:17:20
【问题描述】:

我有一个用户可以在其中创建页面的应用。我想运行一个简单的数据库查询,返回有多少用户创建了超过 2 个页面。

这本质上是我想做的,但当然不是正确的方法:

User.objects.select_related('page__gte=2').count()

我错过了什么?

【问题讨论】:

    标签: django django-queryset django-select-related


    【解决方案1】:

    你应该使用aggregates

    from django.db.models import Count
    User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
    

    【讨论】:

    • 是否可以组合(因为我需要它作为我的管理员的查询集)一个注释计数相关元素的出现和注释计数匹配精确值的元素?以下对我不起作用:super(ModelAdmin, self).queryset(request ).annotate(o_count=Count('v__g_o') ).annotate(timedout_o_count=Count('v__g_o__d_t__exact="AUTO_DECLINE"'))
    【解决方案2】:

    就我而言,我没有像other answer 那样使用最后一个.count(),它也很好用。

    from django.db.models import Count
    
    User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
    

    【讨论】:

      【解决方案3】:

      在 django.db.models 方法中使用 aggregate() 函数! 这非常有用,并且不会与其他注释聚合列真正崩溃。 *在计算的最后一步使用聚合(),它将你的查询集变成字典。

      下面是我使用它们的代码 sn-p。

      cnt = q.values("person__year_of_birth").filter(person__year_of_birth__lte=year_interval_10)\
                     .filter(person__year_of_birth__gt=year_interval_10-10)\
                     .annotate(group_cnt=Count("visit_occurrence_id")).aggregate(Sum("group_cnt"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        • 2021-09-01
        • 2012-02-20
        • 2012-01-01
        相关资源
        最近更新 更多