2013-03-28 39 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')