将querySet的concat结果放入一个列表中

时间:2012-02-20 21:43:24

标签: django django-models django-templates

我有一个模型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

提前致谢,

3 个答案:

答案 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)