具體來說,我有了這樣的在Django中,我如何在一個字段上對模型進行排序,然後得到最後一個項目?
pub_date = models.DateField("date published")
我希望能夠輕鬆地抓取物體與最近pub_date
一個領域的典範。什麼是最簡單/最好的方法來做到這一點?
會像下面這樣做我想要什麼?
Edition.objects.order_by('pub_date')[:-1]
具體來說,我有了這樣的在Django中,我如何在一個字段上對模型進行排序,然後得到最後一個項目?
pub_date = models.DateField("date published")
我希望能夠輕鬆地抓取物體與最近pub_date
一個領域的典範。什麼是最簡單/最好的方法來做到這一點?
會像下面這樣做我想要什麼?
Edition.objects.order_by('pub_date')[:-1]
obj = Edition.objects.latest('pub_date')
您也可以通過將get_latest_by
模型的元簡化的東西,那麼你就能夠做到
obj = Edition.objects.latest()
哈雷的答案是去時的路,你想要最新的,根據特定模型的一些排序標準,爲你做什麼,但一般的解決方法是反向排序和檢索的第一個項目:
Edition.objects.order_by('-pub_date')[0]
注:
Python的名單接受負指標,這意味着一個從列表的末尾偏移,而不是像一個正數開始。但是,如果使用負索引,則QuerySet對象將引發
AssertionError: Negative indexing is not supported.,這就是爲什麼您必須執行以下操作:顛倒順序並獲取
0th
元素。
小心使用
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的方法來做到這一點。
這已經回答了,但更多的參考,這是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]
請參考鏈接獲取更多這樣的細節。希望有所幫助!