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 Nonein diesem Fall zurückkehren möchten , verwenden Sie .first():
arg = args.order_by('-rating').first() # may return None