2008-10-31 6 views

Répondre

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

Vous pouvez également simplifier les choses en mettant get_latest_by dans le modèle de Meta, vous serez en mesure de faire

obj = Edition.objects.latest() 

Voir the docs pour plus d'informations. Vous aurez probablement aussi besoin de définir l'option Meta ordering.

21

La réponse de Harley est la voie à suivre dans le cas où vous voulez la dernière selon certains critères de classement pour les modèles particuliers, comme vous le faites, mais la solution générale est d'inverser l'ordre et récupérer le premier élément:

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

note:

listes de python normales acceptent des index négatifs, qui signifient un décalage par rapport à la fin de la liste, plutôt que le début comme un nombre positif. Cependant, les objets QuerySet vont lever

AssertionError: Negative indexing is not supported.
si vous utilisez un index négatif, c'est pourquoi vous devez faire ce que insin a dit: inverser la commande et récupérer l'élément 0th.

2

Soyez prudent d'utiliser

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

que vous pourriez être indexation d'un QuerySet vide. Je ne suis pas sûr de ce que l'approche correcte est Pythonic, mais la plus simple serait de l'envelopper dans un if/else ou try/catch:

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

Mais, comme l'a dit @Harley, lorsque vous commandez par date, latest() est le djangonic façon de le faire.

0

Cela a déjà été répondu, mais pour plus de référence, voici ce Django Book dit au sujet de Slicing données sur QuerySets:

Notez que le découpage négatif est pas pris en charge:

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

Cette est facile à contourner, cependant. Il suffit de modifier l'instruction, comme order_by() ceci:

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

Adresser le lien pour plus de tels détails. J'espère que cela pourra aider!

Questions connexes