2010-05-21 18 views
19

dado un modelo estándar (llamado imagen) con un autoset 'id', ¿cómo consigo el id máximo?Django SELECT ID máx

Hasta ahora he tratado:

max_id = Image.objects.all().aggregate(Max('id')) 

pero me da un error de clave 'id__max'.

Tratando

max_id = Image.objects.order_by('id')[0].id 

da un argumento 2 al mapa() debe ser compatible con la iteración 'excepción

Cualquier ayuda?

+0

¿Por qué quiere el id máximo? ¿Quieres cargar lo último? ¿La cosa con la fecha más grande? Los ID son números aleatorios, no significan mucho y no hay garantía de que max (id) tenga propiedades útiles. ¿Qué estás * realmente * tratando de hacer? –

+0

http://stackoverflow.com/questions/2087670/how-to-aggregate-over-a-single-queryset-in-django –

Respuesta

32

orden justo por id inversa, y tomar el de arriba.

Image.objects.all().order_by("-id")[0] 
48

En la versión actual de Django (1.4) es aún más fácil de leer

Image.objects.latest('id').id

+1

Si no hay objetos Esto lanzará una excepción Image.DoesNotExist – Necrolyte2

+3

Sí y respuesta anterior hará elevar IndexError en este caso. – Raz

+0

Esto solo funciona en los campos de Fecha –

2

Su lógica es correcta, esto devolverá el id máximo

res = Image.objects.filter().aggregate(max_id=Max('pk')) 
res.get('max_id') 
6

Sé que esto ya tiene una respuesta correcta, pero aquí es otra manera de hacerlo:

prev = Image.objects.last() 

Esto le da el último objeto.

+1

Creo que esta es la mejor respuesta. Es lo más simple seguro. – wanderer0810

Cuestiones relacionadas