簡體   English   中英

計算查詢集循環迭代的最干凈的方法是什么?

[英]What's the cleanest way of counting the iteration of a queryset loop?

我需要遍歷一個查詢集並將對象與序列號i一起放入字典中,它們出現在查詢集中。 但是,Python for循環似乎沒有提供序列號。 因此,我必須創建自己的變量i並在每個循環中遞增它。 我做了類似的事情,這是最干凈的解決方案嗎?

ledgers = Ledger.objects.all()
i = 0

for ledger in ledgers:
    print('Ledger no '+str(i)+' is '+ledger.name)
    i += 1

enumerate(…) [Python-doc]就是為此而設計的:

ledgers = Ledger.objects.all()

for i, ledger in enumerate(ledgers):
    print(f'Ledger no {i} is {ledger.name}')

您可以這樣注釋索引:

from django.db.models import Window, F

ledgers = Ledger.objects.annotate(index=Window(expression=DenseRank(), order_by=F('id').desc()))

ledgers_dict = dict(ledgers.values_list('index', 'name'))

ledgers.filter(index__lt=5, name__contains='foo')  # ledgers is a queryset

有了它,您將獲得一個查詢集,可用於進一步的數據庫操作。

密集等級

暫無
暫無

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

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