2010-09-08 5 views

cevap

10

Muhtemelen en pythonic yolu:

myset = Customer.objects.filter(<something>).order_by(<something>) 
first, last = myset[0], myset.reverse()[0] 
+0

+1. Özlü ve evet, Pythonic. –

+1

bir queryset üzerinde .reverse() kullanabileceğinizi bilmiyordum, güzel! Endeksleme doğrudan kullanarak – monkut

+0

gerçekten pythonic nedir? – Shashank

4
sadece ilk almak için en iyi, en hızlı yolu nedir

ve son

görelim. Eğer raw() yöntemi kullanılarak infaz edilmesi bunu yapmak için bir SQL sorgusu ile gelebilir eğer tabii Of

customers = Customer.objects.filter(**conditions) 
first = customers.order_by('id')[0] 
last = customers.latest('id') 

.

query = "<your query to get first and last>" 
Customer.objects.raw(query) 
+1

You iki kez sorgu yazmak zorunda değilsiniz: myset = Customer.objects.filter (** koşullar); first = myset.order_by ('id') [0]; last = myset..latest ('id') –

+0

@Tomas: Elbette haklısın. Düzeltildi. –

0

ben django iç işleyişini tamamen aşina değilim ama bu olurdu yapmak için en hızlı yol varsayılabilir:

elements = Customer.objects.filter(<something>) 
first_element = elements[0] 
last_element = elements[-1] 
+1

'last_element = ögeler [-1]' bir hata verecek; negatif endeksleme Querysets tarafından desteklenmez. Hangi SQL verilen ("LIMIT" yan tümcesi) kullanarak düşünürseniz anlamlıdır. –

+0

İlk/son_element tanımlaması da elbette gerekli değildir. –

+0

@Manoj tamamen haklısınız. İyi yakalama. –