簡體   English   中英

如何從值列表創建Django查詢集

[英]How to create a Django queryset from a list of values

我得到這樣的清單

a = [1, 2, 3, 4]

此列表與存儲在django模型中的ID相匹配,我們將其稱為Books。

我正在嘗試返回ID為列表中的書籍的查詢集。 我正在考慮使用Q對象並通過這樣的操作來抓取它們

Books.objects.filter(Q(id = 1) | Q(id=2) | Q(id=3) | Q(id=4))

現在我只需要使用這樣的索引:

Books.objects.filter(Q(id = a[0]) | Q(id=a[1]) | Q(id=a[2]) | Q(id=a[3]))

但是,這些列表的長度最多可變化30個左右,並且對索引進行硬編碼將無法工作,而對查詢進行硬編碼將無法滿足列表長度的變化。

這條路線可以走嗎? 如果是這樣,我該如何完成返回ID與列表匹配的書籍?

您應該在__in使用__in查找[Django-doc]

Books.objects.filter(pk__in=a)

如文檔所述:

給定的迭代中 往往是一個listtuple ,或queryset 這不是常見的用例,但是可以接受字符串(可迭代)。

對於簡單的情況,請按照上面的答案使用__in查找

但是,與|連接的Q對象 不是魔術語法,因此應該可以使用循環來構建它們的鏈,例如

qlst = []
for x in some_iterable
    qel = Q( something based on x)
    qlst.append(qel)
if len(qlst) == 0:
    # oops -- must handle somehow, or code below will crash
filter = qlst[0]
for qel in qlst[1:]:
    filter = filter | qel

queryset = Books.objects.filter( filter)

警告:我實際上從來不需要嘗試此操作。

暫無
暫無

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

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