2015-04-12 199 views
5

這似乎是一個Django查詢集行爲有點像一個Python列表。如何將模型實例添加到Django查詢集?

但據我所知,它不支持列表的.append()方法。

我想要做的是這樣的:

from my_django_app.models import MyModel 

queryset = MyModel.objects.none() 
queryset.append(MyModel.objects.first())  ## no list's .append() method! 

有沒有什麼辦法的模型實例添加到現有的查詢集?

回答

7

否。查詢集是查詢的表示 - 因此名稱 - 不是任意集合的實例。

如果你真的需要一個實際的查詢集,而不是一個列表,你可以嘗試積累你需要的對象的ID,然後通過__in查詢得到的對象:

list_of_ids = [] 
list_of_ids.append(my_id) 
... 
queryset = MyModel.objects.filter(id__in=list_of_ids) 

這是不是很有效,但是。

1

查詢集是不是list

所以

to_list = queryset.values() 

要結合queryset

from itertools import chain 
result_queryset = list(chain(queryset1, queryset2)) 

querysets = [queryset1, queryset2] 
result_queryset = list(chain(*querysets)) 
+0

我想要做的是積累一些模型實例到查詢集並返回queryset而不是python列表。有沒有辦法做到這一點? – June

+0

已更新爲加入查詢集 – itzMEonTV

+0

您最終將獲得_list_('result_queryset'),而不是_queryset_。 – June

2

您還可以使用|運算符來創建一個聯盟:

queryset = MyModel.objects.none() 
instance = MyModel.objects.first() 
queryset |= MyModel.objects.filter(pk=instance.pk) 

但警告說,這將取決於你這樣追加項目的數量產生不同的查詢,使低效編譯查詢緩存。

相關問題