は、私は統計の数を持っている場合、私はDjango、カウントクエリを一緒にバンドルしますか?
have_x_many_males = Person.objects.filter(is_male=True).count()
have_x_many_gays = Person.objects.filter(is_gay=True).count()
have_x_many_roberts = Person.objects.filter(last_name_id='robert').count()
...
を行うしかし、これは非常に非効率的である私は私の人口に関する統計の束を取得したいとき、私は関係
class Person(models.Model):
is_asian = models.BooleanField()
is_male = models.BooleanField()
is_gay = models.BooleanField()
last_name = models.ForeignKey('FamilyName')
is_happy = models.BooleanField()
class FamilyName(models.Model):
title = models.CharField(max_length=200, primary_key=True)
現在
を考えてみましょう成長する
クエリをまとめて一度に実行してリストを返す方法はありますか?
>>> main_query = [query_1, query_2, query_3]
>>> main_query.execute()
{'have_x_many_males':5, ...}
ありがとう、ちょうど私が必要としたのですが、 'Person'オブジェクト自体は必要ありません。 'annotate()'の後に 'values()'を実行するだけですか? – AlanSTACK
@Alanうまくいくはずです。https://docs.djangoproject.com/ja/1.10/topics/db/aggregation/#order-of-annotate-and-values-clausesを参照してください。 – serg