【问题标题】:Concat results of querySet into one list将 querySet 的结果合并到一个列表中
【发布时间】:2012-02-20 21:43:23
【问题描述】:

我有一个模型X,包含一个ManyToManyFieldY,我正在尝试将X 的查询集的结果连接到Y 中所有条目的列表中

我知道“简单”的方法是:

for x in X:
    for y in x.Y.all():
        list.append(y)

对此的推理与我之前的问题有关: If x in <listOfModels.field> syntax

提前致谢,

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    使用itertools.chain:

    from itertools import chain
    
    chain(SomeModel.objects.all(), OtherModel.objects.all(), ...)
    

    请记住,chain 返回一个可迭代对象,这意味着您可以在 for 循环等中使用它,但您不能进一步过滤 QuerySet 或执行正常的列表操作。

    【讨论】:

      【解决方案2】:

      把查询转过来。你对Ys感兴趣,所以你应该查询Ys。

      y_list = Y.objects.filter(x__in=X)
      

      【讨论】:

        【解决方案3】:

        您可以尝试将查询集对象链接到一个串联的生成器中:

        chained = itertools.chain(*[x.Y.all() for x in X])
        print chained
        # <itertools.chain object at 0x10100eb90>
        
        for y in chained:
            print y
        

        【讨论】:

          猜你喜欢
          • 2019-07-01
          • 2021-08-28
          • 1970-01-01
          • 2022-09-28
          • 1970-01-01
          • 1970-01-01
          • 2011-06-16
          • 1970-01-01
          • 2015-07-18
          相关资源
          最近更新 更多