Ich habe eine Liste von Objekten. Wie kann ich eine Abfrage ausführen, um den Maximalwert eines Felds anzugeben:
Ich benutze diesen Code:
def get_best_argument(self):
try:
arg = self.argument_set.order_by('-rating')[0].details
except IndexError:
return 'no posts'
return arg
Bewertung ist eine ganze Zahl
django
django-models
max
Johnd
quelle
quelle
Django hat auch die Funktion ' latest (field_name = None) ', die den neuesten (max. Wert) Eintrag findet. Es funktioniert nicht nur mit Datumsfeldern, sondern auch mit Zeichenfolgen und Ganzzahlen.
Sie können den Feldnamen angeben, wenn Sie diese Funktion aufrufen:
Oder Sie können diesen Feldnamen bereits in den Metadaten Ihrer Modelle angeben:
Jetzt können Sie 'latest ()' ohne Parameter aufrufen:
quelle
latest()
. Wenn Sie den Datensatz mit dem Mindestwert benötigen, können Sie ihn verwendenearliest()
.latest()
undearliest()
funktioniert auch mit Nicht-Datumsfeldern, aber es ist ein Nebeneffekt der Implementierung. Sie sollten verwenden<your-queryset>.order_by('<interested-field>').first()
oder<your-queryset>.order_by('<interested-field>').last()
sicherstellen, dass Ihr Code auch dann noch funktioniert, wenn Django-Entwickler Änderungenlatest()
undearliest()
Implementierungen vornehmen, um nur mit Datumsfeldern zu arbeiten.Ich habe dies für mein Projekt getestet, es findet die maximale / min in O (n) Zeit:
Auf diese Weise erhalten Sie garantiert eines der maximalen Elemente, anstatt die gesamte Tabelle zu sortieren und die Spitze zu erreichen (um O (n * logn)).
quelle