2010-09-08 31 views

回答

10

也许最Python的方式:

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

+1。简而言之,是的,Pythonic。 – 2010-09-08 09:25:58

+1

不知道你可以在查询集上使用.reverse(),很好! – monkut 2012-09-28 01:46:27

+0

直接使用索引真的是pythonic? – Shashank 2016-11-11 05:35:09

4

什么是只得到第一个最佳,最快的方式和最后

让我们来看看。

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

当然如果你能想出一个SQL查询来做到这一点可以使用raw()方法被执行。

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

你不必两次写查询:myset = Customer.objects.filter(** conditions); first = myset.order_by('id')[0]; last = myset..latest('id') – 2010-09-08 06:44:34

+0

@Tomas:你当然是对的。纠正。 – 2010-09-08 06:57:46

0

我不完全熟悉的Django的内部工作原理,但我会假设做最快的方式,这将是:

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

'last_element = elements [-1]'会产生错误; Querysets不支持负向索引。如果您想到发出的SQL(使用'LIMIT'子句) – 2010-09-08 06:59:50

+0

定义first/last_element当然可能不是必需的。 – 2010-09-08 07:00:31

+0

@Manoj你是完全正确的。接得好。 – 2010-09-08 18:12:08

相关问题