如何在Django中从QuerySet获取倒数第二项?

Mil*_*ano 2 python django django-models django-queryset

如何从Django QuerySet获取倒数第二项?我试过my_queryset[-2](在检查my_queryset长度是否大于1之后)如下:

if len(my_queryset)>1:
     query = my_queryset[-2]
Run Code Online (Sandbox Code Playgroud)

它返回:

异常值:不支持负索引.

是否有一些"Django"方式来获得这样的项目?

我想到的唯一一件事是反转查询集并得到my_queryset[2]但我不确定它的效率.

编辑:

scans = self.scans.all().order_by('datetime')
if len(scans)>1:
    scan = scans[-2]
Run Code Online (Sandbox Code Playgroud)

e4c*_*4c5 5

此代码产生错误

scans = self.scans.all().order_by('datetime')
if len(scans)>1:
    scan = scans[-2]
Run Code Online (Sandbox Code Playgroud)

相当于

scans = self.scans.all().order_by('-datetime')
if len(scans)>1:
    scan = scans[1]
Run Code Online (Sandbox Code Playgroud)

如果你想得到第二个,那么使用的索引是,1而不是2因为在python偏移中起始0.

另请注意,django查询集是惰性的,这意味着只要有适当的索引,您就可以改变主意,而不会影响性能.

QuerySets是惰性的 - 创建QuerySet的行为不涉及任何数据库活动.您可以整天将过滤器堆叠在一起,在评估QuerySet之前,Django实际上不会运行查询.看看这个例子: