簡體   English   中英

如何從Django的QuerySet中獲取倒數第二項?

[英]How to get penultimate item from QuerySet in Django?

如何從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]

此代碼會產生錯誤

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查詢集是懶惰的 ,這意味着只要適當的索引可用,您就可以改變主意而不會影響性能。

QuerySet是惰性的–創建QuerySet的操作不涉及任何數據庫活動。 您可以整天將過濾器堆疊在一起,並且Django在評估QuerySet之前不會真正運行查詢。 看一下這個例子:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM