2010-05-21 16 views
19

seçer, maksimum kimliği nasıl alabilirim?Django, bir kimlik numarası 'id' olan standart bir model (Resim olarak adlandırılır) verilen maksimum kimlik numarasını

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

ama 'id__max' Anahtar hatayı alıyorum:

Şimdiye kadar denedim.

çalışılıyor

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

istisna

Herhangi bir yardım '() iterasyon desteklemesi gerekir haritaya argüman 2' a verir?

+0

Neden maksimum kimliği istiyorsun? Son şey yüklü mü istiyorsun? En büyük tarihe sahip olan şey? ID'ler rastgele sayılardır, çok fazla şey ifade etmezler ve max (id) 'nin herhangi bir yararlı özelliğe sahip olduğu konusunda hiçbir garanti yoktur. Ne yapmaya çalışıyorsun? –

+0

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

cevap

32

Sadece tersine sırayla sipariş verin ve en üstteki değeri alın.

django (1.4) mevcut sürümünde
Image.objects.all().order_by("-id")[0] 
48

daha da

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

+1

Eğer nesne yoksa bu bir Image.DoesNotExist istisnası atar – Necrolyte2

+3

Evet ve önceki cevaplar Bu durumda IndexError'ı yükseltmek. – Raz

+0

Bu yalnızca Tarih alanları –

2

Mantığınız doğru okunabilir, bu maksimum kimliği dönecektir

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

bunu biliyorum Zaten doğru bir cevabı var ama işte bunu yapmanın başka bir yolu:

prev = Image.objects.last() 

Bu, son nesneyi verir.

+1

Bence bu en iyi cevap. Bu en basit olanı. – wanderer0810

İlgili konular