Frage

Insbesondere Ich habe ein Modell, das ein Feld wie diese hat

pub_date = models.DateField("date published")

Ich möchte in der Lage sein, leicht mit dem jüngsten pub_date das Objekt zu greifen. Was ist der einfachste / beste Weg, dies zu tun?

Wäre so etwas wie die folgenden tun, was ich will?

Edition.objects.order_by('pub_date')[:-1]
War es hilfreich?

Lösung

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

Sie können auch die Dinge vereinfachen, indem sie get_latest_by in dem Meta Modell, dann werden Sie in der Lage sein zu tun,

obj = Edition.objects.latest()

Siehe die docs Für mehr Information. Sie werden wahrscheinlich wollen auch die ordering Meta-Option setzen .

Andere Tipps

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]

Hinweis:

Normale Python Listen akzeptieren negative Indizes, die einen Versatz von dem Ende der Liste bedeuten, anstatt am Anfang wie eine positive Zahl. Allerdings wird QuerySet Objekte erhöhen

AssertionError: Negative indexing is not supported.
wenn Sie einen negativen Index, der ist, warum Sie das tun, was insin sagte:. Die umzukehren und das 0th Element greifen

Seien Sie vorsichtig mit

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

, wie Sie vielleicht eine leere QuerySet werden Indizierung. 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 nach dem Datum sind die Bestellung latest() ist die djangonic Art und Weise, es zu tun.

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

  

Beachten Sie, dass negativer Slicing nicht unterstützt:

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

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

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top