2016-11-18 3 views
2

レコードは、単純なモデルを検討します:、フィールド値最大であるクエリセットで

class Person(models.Model): 
    name = models.CharField(max_length=256) 
    age = models.IntegerField() 

私はその年齢で最大であるPersonオブジェクトのすべてのQuerySetを返す単一の式を希望しますテーブル。私。 20 Personレコードがあり、最大年齢は70ですが、その値を持つ3つの異なるレコードがあります。私は私のquerysetがそれらの3つのPersonオブジェクトを正確に含むようにしたいと思います。

私は何ができると仮定し

:本物の混乱のように思える

Person.objects.filter(age=Person.objects.aggregate(models.Max('age'))['age__max']) 

しかしすごいです。そしてそれはデータベースを2回ヒットします。ヤック

もっと良い選択肢はありますか?

答えて

1

私はあなたの質問に直接答えることはできませんが、1つのクエリでこれを取得しても駄目にならないようにして、コードを明確にすることも重要です。なぜあなたはいたしません。

from django.db.models import Max 
# assumes that you have at least one record 
max_age = Person.objects.aggregate(Max('age'))['age__max'] 
oldest_folks = Person.objects.filter(age=max_age) 

Maxは、SQL文でMAXをするだろう、filterは、単純なSQL検索を行うと、操作のどれもものすごく高価ではありません。

関連する問題