使用Django中的过滤器获取最新记录


90

我正在尝试获取最新的Django模型对象,但似乎无法成功。

这些都不起作用:

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

3
您是否尝试过:obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
凯瑟琳

@catherine,像魅力一样工作!:D。你想写这个作为答案,以便我可以检查吗?
doniyor

在2018年NewsPostImage.objects.filter(newsPostTarget=img_id).first()。希望能帮助到你。
Ngatia Frankline,

Answers:


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

10
@DaveMerwin这是不正确的;解决这个问题有多种方法,这个答案和另一个都是正确的。
乔丹

1
请注意,这是假设id为有序主键整数。通常这是django的默认设置,但有时不是。
dalore

2
这可能很危险,因为过滤器可能会返回一个空列表
Kingston Chan

'-id'用于颠倒顺序!
德拉

3
也许.first()而不是[0]?
fevgenym



17

latest实际上是设计用于日期字段的(它可能也适用于其他总排序类型,但不确定)。你可以使用它没有指定字段名的唯一方法是通过设置get_latest_by元属性,提到这里


8
它可以与主键一起使用,您始终可以执行以下操作:Model.objects.latest('id')
Ander

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.