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

Posted

技术标签:

【中文标题】在 Django 中使用过滤器获取最新记录【英文标题】:Get the latest record with filter in Django 【发布时间】:2013-03-18 12:38:55 【问题描述】:

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

这些都不起作用:

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

【问题讨论】:

你试过了吗:obj= Model.objects.filter(testfield=12).order_by('-id')[:1] @catherine,工作就像一个魅力! :D。你想把这个写成答案让我检查一下吗? 2018 年NewsPostImage.objects.filter(newsPostTarget=img_id).first() 。希望对您有所帮助。 【参考方案1】:

查看来自 django 的文档: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

你需要在 latest() 中指定一个字段。例如。

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

或者,如果您的模型的 Meta 指定 get_latest_by,您可以将 field_name 参数省略为 earliest() or latest()。 Django 会默认使用get_latest_by 中指定的字段。

【讨论】:

“testfield”必须是日期字段吗?【参考方案2】:
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

【讨论】:

@DaveMerwin 这不是不正确的;有多种方法可以解决这个问题,这个答案和另一个答案都是正确的。 请注意,这假设 id 是一个有序的主键整数。这通常是 django 的默认设置,但有时不是。 这可能很危险,因为过滤器可能会返回一个空列表 '-id'用来倒序! 也许是 .first() 而不是 [0] ?【参考方案3】:

last()latest()

最后一次签名():

ModelName.objects.last()

使用最新的():

ModelName.objects.latest('id')

【讨论】:

【参考方案4】:

latest 真正设计用于处理日期字段(它可能也适用于其他全序类型,但不确定)。而在不指定字段名称的情况下使用它的唯一方法是设置get_latest_by 元属性,如here 所述。

【讨论】:

它确实适用于主键,你总是可以这样做:Model.objects.latest('id')【参考方案5】:

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

【讨论】:

【参考方案6】:

您可以在此处与此进行比较。

latest('created')order_by('-created').first() 相同 如果我错了,请纠正我

【讨论】:

以上是关于在 Django 中使用过滤器获取最新记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在python django中获取所有父节点但过滤子节点

Django:过滤一个模型记录以显示其他模型的所有记录

Django 按最新的相关对象过滤

Django:每个外键返回一个过滤对象

Django模板如何使用标签和模板过滤器从json dict中获取数据

在 Django Rest Framework 中过滤 json 记录