2008-10-31 38 views

回答

33
obj = Edition.objects.latest('pub_date') 

您也可以通過將get_latest_by模型的元簡化的東西,那麼你就能夠做到

obj = Edition.objects.latest() 

更多信息,請參見the docs。您可能還需要設置ordering Meta選項。

21

哈雷的答案是去時的路,你想要最新的,根據特定模型的一些排序標準,爲你做什麼,但一般的解決方法是反向排序和檢索的第一個項目:

Edition.objects.order_by('-pub_date')[0] 
4

注:

Python的名單接受負指標,這意味着一個從列表的末尾偏移,而不是像一個正數開始。但是,如果使用負索引,則QuerySet對象將引發

AssertionError: Negative indexing is not supported.
,這就是爲什麼您必須執行以下操作:顛倒順序並獲取 0th元素。

2

小心使用

Edition.objects.order_by('-pub_date')[0] 

,你可能會被索引的空查詢集的。我不知道正確的Python化的做法是什麼,但最簡單的是將其包裝在if/else或try/catch語句:

try: 
    last = Edition.objects.order_by('-pub_date')[0] 
except IndexError: 
    # Didn't find anything... 

但是,正如@Harley說,當你被訂購日期,latest()djangonic的方法來做到這一點。

0

這已經回答了,但更多的參考,這是Django Book有什麼看法上查詢集切片數據:

注意,負切片不支持:

>>> Publisher.objects.order_by('name')[-1] 
Traceback (most recent call last): 
    ... 
AssertionError: Negative indexing is not supported. 

這雖然很容易解決。只要改變ORDER_BY() 聲明,就像這樣:

>>> Publisher.objects.order_by('-name')[0] 

請參考鏈接獲取更多這樣的細節。希望有所幫助!

相關問題