【问题标题】:How combine (merge) several number of querysets?如何组合(合并)多个查询集?
【发布时间】:2017-10-09 02:29:18
【问题描述】:

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

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>]>,]

【问题讨论】:

  • 您在寻找Product.objects.filter(company_id__in=ids)吗?
  • 我不懂你。什么意思?
  • 我不明白你到底想做什么,我想你想在你已经拥有的一组 id 中获得公司的所有产品(也假设公司是 FK)
  • 这里是in 运算符docs.djangoproject.com/en/1.11/ref/models/querysets/#in Entry.objects.filter(id__in=[1, 3, 4]) 的官方文档,使用for 声明
  • @Sayse 谢谢!这就是我要找的!你能不能再回答一次而不是评论。我可以标记你的答案。

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


【解决方案1】:

您似乎只是想获取与现有列表匹配的产品列表,因此您可以使用__in,如果您出于某种原因确实需要查询集列表,您也可以将其设为列表

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

这样做的额外好处是它对您的数据库执行单个查询而不是 n 查询,它还避免了手动解析查询集的需要,使其保持惰性查询并允许您扩展此查询必要时使用更多过滤器。

【讨论】:

  • 很好的答案,但我希望你能补充说明为什么这比 OP 的原始尝试更有效
  • @e4c5 - 好点,我添加了一个额外的句子来扩展它的功能。谢谢
猜你喜欢
  • 2013-09-06
  • 1970-01-01
  • 2019-12-30
  • 2014-01-27
  • 2017-03-09
  • 1970-01-01
  • 2019-08-11
  • 2023-02-14
  • 2019-07-11
相关资源
最近更新 更多