2010-09-08 11 views

Respuesta

10

Probablemente la mayoría Pythonic:

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

+1. Conciso y sí, Pitónico. –

+1

no sabía que podía usar .reverse() en un queryset, ¡agradable! – monkut

+0

usando indización directamente es realmente pitónico? – Shashank

4

¿Cuál es la mejor manera, más rápida para obtener sólo la primera y la última

veamos.

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

Por supuesto si se puede llegar a una consulta SQL para hacer esto podría ser ejecutado por el método de raw().

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

Usted no tiene que escribir la consulta dos veces: myset = Customer.objects.filter (** condiciones); first = myset.order_by ('id') [0]; last = myset..latest ('id') –

+0

@Tomas: Tienes razón, por supuesto. Corregido –

0

no estoy totalmente familiarizado con el funcionamiento interno de Django, pero yo asumiría la forma más rápida de hacer esto sería: forma

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

'last_element = elements [-1]' generará un error; indexación negativa no es compatible con Querysets. Lo cual tiene sentido si piensa en el SQL emitido (usando la cláusula 'LIMIT') –

+0

Definir primero/último_elemento tampoco es necesario, por supuesto. –

+0

@Manoj tienes toda la razón. Buena atrapada. –

Cuestiones relacionadas