[英]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)
如文檔所述:
在給定的迭代中 往往是一個
list
,tuple
,或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.