Sehen Sie das . Ihr Code würde ungefähr so aussehen:
from django.db.models import Max
# Generates a "SELECT MAX..." query
Argument.objects.aggregate(Max('rating')) # {'rating__max': 5}
Sie können dies auch für vorhandene Abfragesätze verwenden:
from django.db.models import Max
args = Argument.objects.filter(name='foo') # or whatever arbitrary queryset
args.aggregate(Max('rating')) # {'rating__max': 5}
Wenn Sie die Modellinstanz benötigen, die diesen Maximalwert enthält, ist der von Ihnen veröffentlichte Code wahrscheinlich der beste Weg, dies zu tun:
arg = args.order_by('-rating')[0]
Beachten Sie, dass dies fehlschlägt, wenn das Abfrageset leer ist, dh wenn keine Argumente mit der Abfrage übereinstimmen (da das [0]
Teil ein löst IndexError
). Wenn Sie dieses Verhalten vermeiden und stattdessen einfach None
in diesem Fall zurückkehren möchten , verwenden Sie .first()
:
arg = args.order_by('-rating').first() # may return None