¿Cómo puedo recuperar el último registro de un determinado conjunto de consultas?
django
django-queryset
Stephen
fuente
fuente
Documento de Django :
fuente
La forma más sencilla de hacerlo es:
books.objects.all().last()
También usa esto para obtener la primera entrada así:
books.objects.all().first()
fuente
books.objects.last()
ybooks.objects.first()
debería hacer el truco.XYZ.objects.first()
yXYZ.objects.last()
Django> = 1.6
Se agregaron los métodos QuerySet first () y last () que son métodos convenientes que devuelven el primer o último objeto que coincide con los filtros. Devuelve Ninguno si no hay objetos que coincidan.
fuente
Para obtener el primer objeto:
ModelName.objects.first()
Para obtener los últimos objetos:
ModelName.objects.last()
Puedes usar el filtro
ModelName.objects.filter(name='simple').first()
Esto funciona para mi.
fuente
Cuando el conjunto de consultas ya está agotado, puede hacer esto para evitar otra sugerencia de db:
last = queryset[len(queryset) - 1] if queryset else None
No lo use
try...except...
.Django no lanza
IndexError
en este caso.Lanza
AssertionError
oProgrammingError
(cuando ejecuta python con la opción -O)fuente
Si usa django 1.6 y versiones posteriores, es mucho más fácil ahora que se introdujo la nueva api:
Model.object.earliest()
Dará último () con dirección inversa.
PD: sé que es una pregunta anterior, publico como si, en el futuro, alguien aterrizara en esta pregunta, conozca esta nueva característica y no termine usando el método anterior.
fuente
Puede usar
Model.objects.last()
oModel.objects.first()
. Si noordering
se define, el conjunto de consultas se ordena en función de la clave principal. Si desea un conjunto de consultas de comportamiento de pedidos, puede consultar los dos últimos puntos.Si está pensando en hacer esto,
Model.objects.all().last()
recuperar el último yModel.objects.all().first()
recuperar el primer elemento en un conjunto de consultas o usarlofilters
sin pensarlo dos veces. Luego, vea algunas advertencias a continuación.La parte importante a tener en cuenta aquí es que si no ha incluido ninguno
ordering
en su modelo, los datos pueden estar en cualquier orden y tendrá un último o primer elemento aleatorio que no se esperaba.P.ej. Supongamos que tiene un modelo nombrado
Model1
que tiene 2 columnasid
yitem_count
10 filas con id 1 a 10. [No hay ningún orden definido]Si obtiene Model.objects.all (). Last () de esta manera, puede obtener cualquier elemento de la lista de 10 elementos. Sí, es aleatorio ya que no hay un orden predeterminado.
Entonces, ¿qué puede hacerse?
ordering
función de cualquier campo o campos de su modelo. También tiene problemas de rendimiento, compruébalo también. Ref: Aquíorder_by
mientras busca. Me gusta esto:Model.objects.order_by('item_count').last()
fuente
La forma más sencilla, sin tener que preocuparse por el orden actual, es convertir el QuerySet en una lista para que pueda usar la indexación negativa normal de Python. Al igual que:
list(User.objects.all())[-1]
fuente