我有一个模型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
提前致谢,
答案 0 :(得分:3)
使用itertools.chain
:
from itertools import chain
chain(SomeModel.objects.all(), OtherModel.objects.all(), ...)
请记住chain
返回一个iterable,这意味着您可以在for循环等中使用它,但是您无法进一步过滤QuerySet或执行常规列表操作。
答案 1 :(得分:0)
您可以尝试将查询集对象链接到一个连续的生成器中:
chained = itertools.chain(*[x.Y.all() for x in X])
print chained
# <itertools.chain object at 0x10100eb90>
for y in chained:
print y
答案 2 :(得分:0)
转动查询。你对Ys感兴趣,所以你应该查询Ys。
y_list = Y.objects.filter(x__in=X)