2008-10-31 12 views

Antwort

33
obj = Edition.objects.latest('pub_date') 

können Sie auch die Dinge vereinfachen, indem get_latest_by in dem Modell der Meta setzen, dann werden Sie in der Lage sein, für weitere Informationen zu tun

obj = Edition.objects.latest() 

Siehe the docs. Wahrscheinlich möchten Sie auch die Option ordering Meta festlegen.

21

Harley Antwort ist die Art und Weise für den Fall zu gehen, wo Sie die neueste nach einigen Ordnungskriterien für bestimmte Modelle mögen, wie Sie das tun, aber die allgemeine Lösung ist, die Bestellung und rufen Sie den ersten Punkt zu umkehren:

Edition.objects.order_by('-pub_date')[0] 
4

Hinweis:

Normale python Listen akzeptieren negative Indizes, die einen Versatz von dem Ende der Liste bedeuten, anstatt am Anfang wie eine positive Zahl. QuerySet-Objekte werden jedoch

AssertionError: Negative indexing is not supported.
auslösen, wenn Sie einen negativen Index verwenden, weshalb Sie tun müssen, was insin sagte: die Reihenfolge umkehren und das Element 0th greifen.

2

Seien Sie vorsichtig von

Edition.objects.order_by('-pub_date')[0] 

mit, wie Sie eine leere QuerySet Indizierung werden könnten. Ich bin nicht sicher, was der richtige Pythonic Ansatz ist, aber die einfachste wäre es in einem einzuwickeln if/else oder try/catch:

try: 
    last = Edition.objects.order_by('-pub_date')[0] 
except IndexError: 
    # Didn't find anything... 

Aber, wie @Harley sagte, wenn Sie die Bestellung von Datum, latest() ist die djangonic Weg, es zu tun.

0

Dies wurde bereits beantwortet worden, aber für mehr Referenz, das ist, was Django Book über Slicing Daten über QuerySets zu sagen hat:

Hinweis, dass negative Slicing nicht unterstützt wird:

>>> Publisher.objects.order_by('name')[-1] 
Traceback (most recent call last): 
    ... 
AssertionError: Negative indexing is not supported. 

Diese ist jedoch leicht zu umgehen. Ändern Sie einfach die order_by() Anweisung, wie folgt aus:

>>> Publisher.objects.order_by('-name')[0] 

Siehe den Link für weitere solche Details. Ich hoffe, das hilft!