django - 用过滤器获取最新记录

don*_*yor 73 python django django-models django-queryset

我试图获得最新的django模型对象,但似乎无法成功.

也不

obj = Model.objects.filter(testfield=12).latest()
Run Code Online (Sandbox Code Playgroud)

也不

obj = Model.objects.latest().filter(testfield=12)
Run Code Online (Sandbox Code Playgroud)

工作中.

请帮忙.

小智 102

请参阅django的文档:https: //docs.djangoproject.com/en/dev/ref/models/querysets/#latest

您需要在latest()中指定一个字段.例如.

obj= Model.objects.filter(testfield=12).latest('testfield')
Run Code Online (Sandbox Code Playgroud)

或者,如果模型的Meta指定了get_latest_by,则可以将field_name参数保留为earliest() or latest().Django将get_latest_by默认使用指定的字段.

  • "testfield"必须是日期字段吗? (2认同)

cat*_*ine 85

obj= Model.objects.filter(testfield=12).order_by('-id')[0]
Run Code Online (Sandbox Code Playgroud)

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

acj*_*jay 15

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

  • 它确实适用于主键,你总是可以这样做:```Model.objects.latest('id')``` (8认同)

Sub*_*tha 8

last() 最新()

Usign last():

ModelName.objects.last()
Run Code Online (Sandbox Code Playgroud)

使用Latest():

ModelName.objects.latest('id')
Run Code Online (Sandbox Code Playgroud)


Tho*_*ohn 5

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