如何在Django中用另一个QuerySet的结果过滤一个QuerySet?

wbgh16ku  于 2023-05-01  发布在  Go
关注(0)|答案(2)|浏览(160)

现在我有一个Django QuerySet,我想通过另一个QuerySet的结果来过滤它。现在我正在这样做(它工作):

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

其中字段是外键的名称,即queryset中的pk。ORM足够聪明,可以将上述内容作为一个查询来运行。
我试图将其简化为(即使用对象列表本身进行过滤,而不是显式地说pk):

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

但这会产生以下错误:

AssertionError: Cannot combine queries on two different base models.

什么是正确的方法来进行这种类型的过滤?

v2g6jxz6

v2g6jxz61#

你可以做下一个:

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

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

j2cgzkjk

j2cgzkjk2#

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

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

相关问题