如何检索特定查询集中的最后一条记录?
Answers:
编辑:您现在必须使用 Entry.objects.latest('pub_date')
您可以使用reverse()
:
queryset.reverse()[0]
另外,请注意Django文档中的以下警告:
...请注意,
reverse()
通常只应在具有定义顺序的QuerySet上调用它(例如,在查询定义了默认顺序的模型时或使用时order_by()
)。如果没有为给定定义这样的顺序,则对其进行QuerySet
调用reverse()
没有实际效果(该顺序在调用之前reverse()
是未定义的,之后将保持未定义)。
latest(field_name=None)
使用作为日期字段提供的field_name按日期返回表中的最新对象。本示例根据
pub_date
字段返回表中的最新Entry :
Entry.objects.latest('pub_date')
的Django> = 1.6
添加了QuerySet方法first()和last(),这是返回与过滤器匹配的第一个或最后一个对象的便捷方法。如果没有匹配的对象,则返回None。
获取第一个对象:
ModelName.objects.first()
获取最后一个对象:
ModelName.objects.last()
您可以使用过滤器
ModelName.objects.filter(name='simple').first()
这对我有用。
如果使用django 1.6及更高版本,由于引入了新的api,它现在要容易得多-
Model.object.earliest()
它将给出带有相反方向的latest()。
ps-我知道它的旧问题,我发贴好像有人在这个问题上前进,他们知道这个新功能,而最终没有使用旧方法。
您可以使用Model.objects.last()
或Model.objects.first()
。如果ordering
未定义,则根据主键对查询集进行排序。如果要订购行为查询集,则可以参考最后两点。
如果您打算这样做,则可以不加思索地在查询集中Model.objects.all().last()
检索最后一个和Model.objects.all().first()
检索第一个元素filters
。然后在下面看到一些注意事项。
这里要注意的重要部分是,如果您ordering
的模型中未包含任何元素,则数据可以按任何顺序排列,并且您将有一个意料之外的随机的last或first元素。
例如。假设您有一个名为的模型Model1
,该模型有2列id
,item_count
10行,其ID为1到10。[没有定义顺序]
如果以这种方式获取Model.objects.all()。last(),则可以从10个元素的列表中获取任何元素。是的,这是随机的,因为没有默认顺序。
那该怎么办呢?
ordering
基于模型上的任何一个或多个字段进行定义。它也有性能问题,请也检查一下。参考:这里order_by
在提取时使用。像这样:Model.objects.order_by('item_count').last()
最简单的方法,而不必担心当前的顺序,是将QuerySet转换为列表,以便您可以使用Python的常规负索引。像这样:
list(User.objects.all())[-1]