私はページ上で実行するクエリの数を制限しようとしています。クエリーセットは、過去24時間以内に作成されたオブジェクトを返します。私はその後、フィールドに基づいてオブジェクトを数えるためにそのクエリーセットをフィルタリングしたい。Django:クエリーセットをフィルタリングしてからカウントする
例(この例では)ブランドの増加により
cars = self.get_queryset()
volvos_count = cars.filter(brand="Volvo").count()
mercs_count = cars.filter(brand="Merc").count()
、クエリの数を照会しなければならないブランドの数と共に直線的に成長します。
ブランドのユニークな値とクエリーセット内のインスタンスの数をすべて返す自動車のクエリを作成するにはどうすればよいですか?
結果:
{'volvos': 4, 'mercs': 50, ...}
ありがとう!
EDIT:コメント
これまでのところ、彼らがされている近くではなく、かなりのマークに。 values_list( 'brand'、flat = True)を使用するとブランドが返されます。そこから使用することができます
from collections import Counter
合計を返すには。これを単一のクエリから行う方法があれば大丈夫ですが、可能ではないかもしれません。
は、それがこれを行うための一つの方法のように思えるだけqueryset.values_list(「ブランド」、=真平ら)で、その後、カウンターを使用します。あなたが望む直接形式の辞書にそれを変換することができますその結果それは私が探していた値とカウントを返します。 – Emile
カウンターの使用は実際には効果がありますが、かなりの量の結果を得始めると非常に遅くなります。そのような作業は、データベースにはるかに適しています。 – Shadow