См. это . Ваш код будет выглядеть примерно так:
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