2008-10-31 20 views

Respuesta

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

También puede simplificar las cosas, poniendo get_latest_by en Meta del modelo, entonces usted será capaz de hacer

obj = Edition.objects.latest() 

Ver the docs para obtener más información. Probablemente también desee establecer la opción Meta ordering.

21

respuesta de Harley es el camino a seguir para el caso en el que desea que la última de acuerdo con algunos criterios de ordenación para los modelos particulares, como lo hace, pero la solución general es invertir el orden y recuperar el primer elemento:

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

Nota:

listas normal de python aceptan índices negativos, que significan un desplazamiento desde el final de la lista, en lugar de al principio como un número positivo. Sin embargo, los objetos QuerySet aumentarán

AssertionError: Negative indexing is not supported.
si usa un índice negativo, por lo que tiene que hacer lo que dijo insinuación: invierta el orden y tome el elemento 0th.

2

tener cuidado al utilizar

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

como se podría estar indexando un QuerySet vacía. No estoy seguro de lo que el enfoque correcto es Pythonic, pero la más sencilla sería la de envolverlo en un if/else o try/catch:

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

Pero, como dijo @Harley, cuando se está ordenando por fecha, latest() es el djangonic manera de hacerlo.

0

Esto ya ha sido respondida, pero para mayor referencia, esto es lo que Django Book tiene que decir acerca de la fragmentación de datos en QuerySets:

Tenga en cuenta que rebanar negativo no es compatible:

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

Este es fácil de recorrer, sin embargo. Sólo cambia el order_by() declaración, así:

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

Consulte el enlace para más detalles tales. ¡Espero que ayude!

Cuestiones relacionadas