ユーザーがページを作成するアプリがあります。2ページ以上を作成したユーザーの数を返す単純なDBクエリを実行したいと思います。
これは基本的に私がやりたいことですが、もちろんそれは正しい方法ではありません。
User.objects.select_related('page__gte=2').count()
私は何が欠けていますか?
ユーザーがページを作成するアプリがあります。2ページ以上を作成したユーザーの数を返す単純なDBクエリを実行したいと思います。
これは基本的に私がやりたいことですが、もちろんそれは正しい方法ではありません。
User.objects.select_related('page__gte=2').count()
私は何が欠けていますか?
集計を使用する必要があります。
from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
私の場合、他の答え.count()
のように最後に使用しなかったし、それもうまく機能します。
from django.db.models import Count
User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
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"))