Obtenga el último registro con filtro en Django


90

Estoy tratando de obtener el último objeto de modelo de Django pero parece que no puedo tener éxito.

Ninguno de estos funciona:

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)

3
¿Usted ha intentado:obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
Catalina

@catherine, ¡trabajando como un encanto! :RE. ¿Quieres escribir esto como respuesta para que pueda verificarlo?
donante

En 2018 NewsPostImage.objects.filter(newsPostTarget=img_id).first(). Espero eso ayude.
Ngatia Frankline

Respuestas:


101
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

10
@DaveMerwin no es incorrecto; Hay varias formas de resolver este problema, y ​​tanto esta respuesta como la otra son correctas.
Jordania

1
Tenga en cuenta que esto supone la suposición de que id es un entero de clave primaria secuenciado. Normalmente es el valor predeterminado de django, pero a veces no.
dalore

2
Esto podría ser peligroso porque el filtro podría devolver una lista vacía
Kingston Chan

'-id' se usa para invertir el orden.
Indra

3
tal vez .first () en lugar de [0]?
fevgenym



17

latestestá realmente diseñado para trabajar con campos de fecha (probablemente también funcione con otros tipos de orden total, pero no estoy seguro). Y la única forma en que puede usarlo sin especificar el nombre del campo es configurando el get_latest_bymeta atributo, como se menciona aquí .


8
Funciona con claves primarias, siempre puede hacer algo como esto:Model.objects.latest('id')
Ander

6

obj= Model.objects.filter(testfield=12).order_by('-id')[:1] es la solucion correcta

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.