【问题标题】:How to filter a query set with the results of another query set in Django?如何使用 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.

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

【问题讨论】:

    标签: django django-queryset django-orm


    【解决方案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 的概念。我提出了一个解决方案。我的问题是除了我提出的查询之外,是否还有其他方式来编写查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2016-02-01
      • 2018-07-07
      • 2020-08-22
      相关资源
      最近更新 更多