如何从 Django QuerySet 中获取倒数第二项?我尝试my_queryset[-2]
(在检查my_queryset
长度是否大于1之后),如下所示:
if len(my_queryset)>1:
query = my_queryset[-2]
然后它返回:
异常值:不支持负索引。
是否有一些“Django”方式来获得这样的项目?
我唯一想到的是反转查询集并获取my_queryset[2]
,但我不确定它的效率。
修改
scans = self.scans.all().order_by('datetime')
if len(scans)>1:
scan = scans[-2]
答案 0 :(得分:5)
此代码产生错误
scans = self.scans.all().order_by('datetime')
if len(scans)>1:
scan = scans[-2]
相当于
scans = self.scans.all().order_by('-datetime')
if len(scans)>1:
scan = scans[1]
如果你想获得第二个,要使用的索引是1
而不是2
,因为python偏移从0
开始。
另请注意django querysets are lazy,这意味着只要有合适的索引,您就可以改变主意,而不会影响性能。
QuerySets是懒惰的 - 创建QuerySet的行为不涉及 任何数据库活动。你可以整天堆叠过滤器, 在QuerySet之前,Django实际上不会运行查询 评估。看一下这个例子: