2014-10-17 129 views
1

现在我有一个Django查询集,我想通过另一个查询集的结果进行过滤。现在我这样做的(和它的作品):使用Django中另一个查询集的结果过滤查询集

field = 'content_object__pk' 
values = other_queryset.values_list(field, flat=True) 
objects = queryset.filter(pk__in=values) 

其中字段是一个外键的pkqueryset的名称。 ORM足够聪明,以上是一个查询。

我正在努力简化这(即与对象列表进行过滤,他们的自我,而不是明确地说pk):

field = 'content_object' 
objects = queryset & other_queryset.values_list(field, flat=True) 

但这提供了以下错误:

AssertionError: Cannot combine queries on two different base models. 

做这种类型的过滤的正确方法是什么?

回答

-1

你可以在Django链查询...

qs = entry.objects.filter(...).filter(...) 
+0

我明白了,但在这种情况下......中会发生什么?你可以把'.filer(in = ...)'(我的想法是否定的)。 – 2014-10-17 19:34:23

+0

是的,你可以把Person.objects.filter(name =“michael”).filter(lastname =“riemann”) – michaelwayman 2014-10-18 05:22:04

+0

这些都是带有字符串过滤器的例子。它不回答如何使用查询集。 – 2014-10-18 14:36:07

2

你可以做下:

result = MyModel.objects.filter(field__in=other_query) 

结果将在模型中的对象,其中字段是一个外键在other_query中的模型