73

ユーザーがページを作成するアプリがあります。2ページ以上を作成したユーザーの数を返す単純なDBクエリを実行したいと思います。

これは基本的に私がやりたいことですが、もちろんそれは正しい方法ではありません。

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

私は何が欠けていますか?

4

3 に答える 3

137

集計を使用する必要があります。

from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
于 2011-06-29T19:05:40.927 に答える
3

私の場合、他の答え.count()のように最後に使用しなかったし、それもうまく機能します。

from django.db.models import Count

User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
于 2017-06-24T05:59:30.843 に答える
0

django.db.modelsメソッドでaggregate()関数を使用してください!これは非常に便利であり、他のアノテーション集約列で実際に押しつぶされることはありません。*計算の最後のステップでaggregate()を使用すると、クエリセットがdictに変わります。

以下は、それらを使用した私のコードスニペットです。

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"))
于 2021-04-03T21:17:54.563 に答える