2013-03-28 42 views
51

我想獲取最新的django模型對象,但似乎無法成功。django - 獲取帶有過濾器的最新記錄

既不

obj= Model.objects.filter(testfield=12).latest() 

也不

obj= Model.objects.latest().filter(testfield=12) 

工作。

請大家幫忙。

+2

你試過:'OBJ =型號.objects.filter(testfield = 12).order_by(' - id')[:1]' – catherine 2013-03-28 06:41:03

+0

@c atherine,工作就像一個魅力! :d。你想寫這個答案,所以我可以檢查它? – doniyor 2013-03-28 06:44:50

+0

好的,謝謝你... – catherine 2013-03-28 06:48:17

回答

54
obj= Model.objects.filter(testfield=12).order_by('-id')[0] 
+3

你使用'[:1]'而不是'[0]'的原因嗎? – acjay 2013-03-28 06:56:14

+3

@ acjohnson55抱歉,我忘記了,當我使用過濾器時,我總是使用[:1]。感謝您的更正:) – catherine 2013-03-28 07:10:06

+0

這是不正確的。請參閱下面的Pranav的答案。 – 2014-08-21 23:19:45

12

latest確實是設計用於處理日期字段(它可能也適用於其他總排序類型,但不確定)。並且您可以在不指定字段名稱的情況下使用它的唯一方法是設置get_latest_by元屬性,如here所述。

+4

它可以使用主鍵,你總是可以做這樣的事情: 'Model.objects.latest('id')''' – Ander 2015-11-18 08:24:25

60

請參閱該文檔從Django的: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

你需要指定一個字段中最新的()。例如。

obj= Model.objects.filter(testfield=12).latest('testfield') 

或者,如果你的模型的元指定get_latest_by,您可以在field_name參數離開關閉以earliest() or latest()。 Django默認使用get_latest_by中指定的字段。

+2

「testfield」必須是日期字段? – 2015-10-29 10:18:12

0

obj= Model.objects.filter(testfield=12).order_by('-id')[:1]是正確的解決方案

0

last()latest()

Usign最後():

ModelName.objects.last() 

使用最新的():

ModelName.objects.latest('id')