Voir este . Votre code serait quelque chose comme le suivant :
from django.db.models import Max
# Generates a "SELECT MAX..." query
Argument.objects.aggregate(Max('rating')) # {'rating__max': 5}
Vous pouvez également l'utiliser sur des querysets existants :
from django.db.models import Max
args = Argument.objects.filter(name='foo') # or whatever arbitrary queryset
args.aggregate(Max('rating')) # {'rating__max': 5}
Si vous avez besoin de l'instance du modèle qui contient cette valeur maximale, alors le code que vous avez posté est probablement la meilleure façon de le faire :
arg = args.order_by('-rating')[0]
Notez que cette opération se soldera par une erreur si l'ensemble de requêtes est vide, c'est-à-dire si aucun argument ne correspond à la requête (parce que l'attribut [0]
soulèvera un IndexError
). Si vous souhaitez éviter ce comportement et renvoyer simplement le message None
dans ce cas, utilisez .first()
:
arg = args.order_by('-rating').first() # may return None