我有一個模型X
,包含ManyToManyField
Y
,我試圖串連的X
的一個QuerySet結果到所有條目的列表中Y
的毗連結果到一個列表
我知道了「易」的方法是:
for x in X:
for y in x.Y.all():
list.append(y)
的推理,這是涉及到我剛纔的問題: If x in <listOfModels.field> syntax
由於提前,
我有一個模型X
,包含ManyToManyField
Y
,我試圖串連的X
的一個QuerySet結果到所有條目的列表中Y
的毗連結果到一個列表
我知道了「易」的方法是:
for x in X:
for y in x.Y.all():
list.append(y)
的推理,這是涉及到我剛纔的問題: If x in <listOfModels.field> syntax
由於提前,
打開查詢各地。你對Ys感興趣,所以你應該詢問Ys。
y_list = Y.objects.filter(x__in=X)
使用itertools.chain
:
from itertools import chain
chain(SomeModel.objects.all(), OtherModel.objects.all(), ...)
只需記住,chain
返回一個迭代,這意味着,你可以用它在for循環等,但不能進一步篩選查詢集或者進行正常的列表操作。
你可以嘗試串聯起來的查詢集對象爲串聯的發電機:
chained = itertools.chain(*[x.Y.all() for x in X])
print chained
# <itertools.chain object at 0x10100eb90>
for y in chained:
print y