2017-07-13 22 views
0

集計を使用して計算された値でフィルタリングしようとしています。現在、私はこれをやっている:Django:集計によるフィルタ

max_val = some_queryset.aggregate(max_val=Max('some_prop'))['max_val'] 
some_queryset.filter(some_prop=max_val) 

は、私はすべてが単一のクエリで行われ、フィルタリングするmax_valを使用することができます方法はありますか?

残念ながら私はDjango 1.4を使用しています。いいえ、私はそれを更新することはできません、それは単に私にではありません。

答えて

2

あなたは、新しいフィールドに注釈を付けるとF表現を使用して集計フィールドの値と比較することができます

from django.db.models import F 

some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=F('another_prop')) 

注釈とF式は、Djangoの1.4に存在します。

-1

これはdjango 1.4で動作するかどうかわかりませんが、さらにフィルタリングする必要がある場合は注釈を使用する必要があります。

some_queryset.annotate(max_val=Max('some_prop')).filter(max_val=max_val)

あなたの集計クエリからmax_valを投入する必要があるかもしれません。

+0

右手側は、問題を解消するための変数です。 – Jieter

関連する問題