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)
此代码产生错误
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实际上不会运行查询.看看这个例子: