使用Django中的另一个查询集的结果过滤查询集

时间:2014-10-17 19:09:22

标签: django django-queryset django-orm

现在我有一个Django查询集,我想根据另一个查询集的结果进行筛选。现在我这样做(并且它有效):

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

其中field是pkqueryset的外键名称。 ORM非常智能,可以运行上面的一个查询。

我试图将其简化为(即过滤对象列表而不是明确说出pk):

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

但是这会出现以下错误:

AssertionError: Cannot combine queries on two different base models.

进行此类过滤的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

你可以做下一个:

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

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

答案 1 :(得分:-1)

你可以在Django链接查询...

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