如何使用 Django 中另一个查询集的结果过滤查询集?
Posted
技术标签:
【中文标题】如何使用 Django 中另一个查询集的结果过滤查询集?【英文标题】:How to filter a query set with the results of another query set in Django? 【发布时间】:2014-12-13 10:31:40 【问题描述】:现在我有一个 Django 查询集,我想通过另一个查询集的结果进行过滤。现在我正在这样做(并且有效):
field = 'content_object__pk'
values = other_queryset.values_list(field, flat=True)
objects = queryset.filter(pk__in=values)
其中字段是pk
中的外键名称queryset
。 ORM 足够智能,可以运行上述查询。
我试图将其简化为(即使用对象列表本身进行过滤,而不必明确说出pk
):
field = 'content_object'
objects = queryset & other_queryset.values_list(field, flat=True)
但这会产生以下错误:
AssertionError: Cannot combine queries on two different base models.
进行此类过滤的正确方法是什么?
【问题讨论】:
【参考方案1】:你可以做下一个:
result = MyModel.objects.filter(field__in=other_query)
结果将是模型中的对象,其中字段是 other_query 中模型的外键
【讨论】:
【参考方案2】:您可以在 Django 中链接查询...
qs = entry.objects.filter(...).filter(...)
【讨论】:
我明白,但在这种情况下,......你能把.filer(in=...)
(我的想法是没有)。
是的,你可以把 Person.objects.filter(name="michael").filter(lastname="riemann")
这些都是字符串过滤器的例子。它没有回答如何使用查询集。
数据库中的每个表都应该有一个主键。如果两个表相互关联,则应该用外键、一对一或多对多关系表示。 . 当你查询一张表的时候,用我展示的方法,将关系的主键引用到另一张表...你不使用查询集进行查询,你使用元组和关系来选择你需要的数据即使它跨越多个表
我理解 pk an fk 的概念。我提出了一个解决方案。我的问题是除了我提出的查询之外,是否还有其他方式来编写查询。以上是关于如何使用 Django 中另一个查询集的结果过滤查询集?的主要内容,如果未能解决你的问题,请参考以下文章