См. это. Ваш код будет примерно таким:
from django.db.models import Max
# Generates a "SELECT MAX..." query
Argument.objects.aggregate(Max('rating')) # {'rating__max': 5}
Вы также можете использовать это для существующих наборов запросов:
from django.db.models import Max
args = Argument.objects.filter(name='foo') # or whatever arbitrary queryset
args.aggregate(Max('rating')) # {'rating__max': 5}
Если вам нужен экземпляр модели, содержащий это максимальное значение, то опубликованный вами код, вероятно, является лучшим способом сделать это:
arg = args.order_by('-rating')[0]
Обратите внимание, что это приведет к ошибке, если набор запросов пуст, то есть если ни один аргумент не соответствует запросу (поскольку часть [0]
вызовет IndexError
). Если вы хотите избежать такого поведения и вместо этого просто вернуть None
в этом случае, используйте .first()
:
arg = args.order_by('-rating').first() # may return None
person
Sasha Chedygov
schedule
10.05.2009