Django:Queryset中的循环查询集

时间:2016-07-29 20:10:23

标签: django django-queryset

所以我有queryset1用2个参数过滤ModelA:

queryset1 = ModelA.objects.all().filter(par1="X",par2="Y")

然后我有另一个queryset2,我想通过抓取已经被queryset1过滤的元素来过滤ModelB,并且还要跟随另一个参数:

queryset2 = ModelB.objects.all().filter(par3="X" for i in queryset,par4="Z")

我的问题是: 有没有办法在已经创建的查询集上执行查询集? 最后,我想从ModelA和ModelB中拉出par1 par2 par3之后的对象。我该怎么做?

2 个答案:

答案 0 :(得分:1)

你能做的是:

  1. par3是同一类型relation的{​​{1}}时:

    queryset1
  2. queryset2 = ModelB.objects.all().filter(par3__in=queryset1, par4="Z") 不是values_list('some_field', flat=True)

    时,请使用part3表示法
    relation

答案 1 :(得分:1)

如果没有for循环,它很有可能实现。使用for循环的缺点是您实际上正在执行两个查询并检索第一个查询的结果。如果这恰好产生了大量行,那么就会烧掉资源并缩短响应时间。

queryset2 = ModelB.objects.all().filter(par3__in=queryset,par4="Z")

这会产生一个子查询,如https://docs.djangoproject.com/en/1.9/ref/models/querysets/

所述
  

您还可以使用查询集动态评估值列表   而不是提供文字值列表:

SELECT * FROM app_modelb where par3 IN (SELECT ...)