在 Django 中使用 filter 获取最新记录

我试图得到最新的 Django 模型对象,但似乎不能成功。

这两种方法都不管用:

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)
165129 次浏览
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

latest实际上是为处理日期字段而设计的(它可能也适用于其他总排序类型,但不确定)。使用它而不指定字段名的唯一方法是设置 get_latest_by meta 属性,正如前面提到的 给你

看看姜戈的文件: Https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

您需要在 update ()中指定一个字段,例如。

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

或者,如果模型的 Meta 指定 get _ last _ by,则可以将 field_name参数保留到 earliest() or latest()。缺省情况下,Django 将使用 get_latest_by中指定的字段。

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

Last () < a href = “ https://docs.djangoproject.com/en/1.11/ref/model/querysets/# last”rel = “ noReferrer”> last ()

Usign last () :

ModelName.objects.last()

最新() :

ModelName.objects.latest('id')

你可以和这个做个比较。

image

latest('created')order_by('-created').first()是一样的 Please correct me if I am wrong

obj = Model.objects.filter(testfield=12).order_by('id').latest('id')
  1. 根据您需要的字段进行筛选——在本例中是 testfield

Filter (testfield = 12)

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

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

Filter (testfield = 12) . order _ by (‘ id’)

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

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

  1. 在您拥有查询集并对其进行排序之后。根据您需要的条件获取最新的信息——在本例中是 id。

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