获取查询集中的最后一条logging
如何检索某个查询集中的最后一条logging?
你可以简单的做这样的事情,使用reverse()
:
queryset.reverse()[0]
另外,请注意Django文档中的这个警告:
…注意
reverse()
通常只能在具有已定义顺序的QuerySet上调用(例如,在查询定义默认顺序的模型时,或者在使用order_by()
)。 如果没有为给定的QuerySet
定义这样的顺序,那么调用reverse()
就没有实际效果(在调用reverse()
之前,顺序是未定义的,并且在之后将保持未定义)。
Django文档 :
latest(field_name=None)
使用作为date字段提供的field_name按date返回表中的最新对象。此示例根据
pub_date
字段返回表中的最新条目:Entry.objects.latest('pub_date')
Django> = 1.6
添加了QuerySet方法first()和last(),它们是方便的方法,返回匹配filter的第一个或最后一个对象。 如果没有匹配的对象,则返回None。
最简单的方法是:
books.objects.all().last()
你也可以用这个来获得第一个条目:
books.objects.all().first()
获取第一个对象:
ModelName.objects.first()
要获得最后一个对象:
ModelName.objects.last()
你可以使用filter
ModelName.objects.filter(name='simple').first()
这对我有用。
如果使用django 1.6或更高版本,现在引入新的api会更容易 –
Model.object.earliest()
它会给最新的()与反向。
ps – 我知道它的老问题,我把这个问题推到某人身上,他们知道这个新function,而不是最终使用旧的方法。
当查询集已经用尽,你可以这样做,以避免另一个数据库提示 –
last = queryset[len(queryset) - 1] if queryset else None
不要使用try...except...
在这种情况下,Django不会抛出IndexError
。
它抛出AssertionError
或ProgrammingError
(当你运行与-O选项的Python)
最简单的方法,无需担心当前的顺序,将查询集转换为列表,以便您可以使用Python的正常负向索引。 像这样:
list(User.objects.all())[-1]