如何组合(合并)几个查询集?

时间:2017-05-10 12:26:49

标签: python django python-3.x django-1.10

有人可以说如何合并(合并)多个查询集。查询集的数量不固定。我尝试了下一个代码,但它没有像我预期的那样工作。如何解决这个问题?

first_list = []
for id in ids:
   products = Product.objects.filter(company=id)
   first_list.append(products)

final_list = list(chain(first_list))

此代码返回:

[<QuerySet [<1>, <2>]>, <QuerySet [<3>, <4>]>, <QuerySet [<5>, <6>]>]

我需要:

[<QuerySet [<1>, <2>, <3>, <4>, <5>, <6>]>,]

1 个答案:

答案 0 :(得分:1)

好像您只是想获得与现有列表匹配的产品列表,因此您可以使用__in,如果您确实需要某些查询集列表,则可以将其设为列表原因

 products = Product.objects.filter(company_id__in=ids)
 odd_list = [products]

这样做的另一个好处是,它会对您的数据库执行单个查询而不是n个查询,这也避免了手动解析查询集以使其保持惰性查询并允许您扩展的需要此查询可根据需要使用其他过滤器。