ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试获取最新的 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() 。希望能帮助到你。

P
Pranav Singh

请参阅 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”必须是日期字段吗?
c
catherine
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

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

last() latest()

最后注册():

ModelName.objects.last()

使用最新():

ModelName.objects.latest('id')

a
acjay

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


它确实适用于主键,您始终可以执行以下操作:Model.objects.latest('id')
T
Thomas John

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


N
Nikhil Bhardwaj

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

https://i.stack.imgur.com/49QK0.png

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


C
Cornel Ciobanu
obj = Model.objects.filter(testfield=12).order_by('id').latest('id')

根据您需要的字段进行过滤 - 在这种情况下是 testfield

Model.objects.filter(testfield=12)

为了获得最新的记录,首先需要对查询集进行排序。这样它就知道根据条件返回最后一条记录。

现在,根据您的主键对结果进行排序 - 大多数情况下 pk=id

Model.objects.filter(testfield=12).order_by('id')

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#order-by

默认情况下,QuerySet 返回的结果按照模型 Meta 中 ordering 选项给出的排序元组进行排序。您可以使用 order_by 方法在每个 QuerySet 的基础上覆盖它。

获得查询集并对其进行排序后。根据您需要的标准获取最新信息 - 在这种情况下是 id。

Model.objects.filter(testfield=12).order_by('id').latest('id')


感谢您的贡献!如果您有时间,请按照 StackOverflow 上的 explain entirely code-based answers 建议编辑答案的解释。