Django使用QuerySet的子查询

3 投票
2 回答
2980 浏览
提问于 2025-04-16 04:27

可以在一个查询集中使用另一个查询集来进行子查询吗?

举个例子:

q = Something.objects.filter(x=y).extra(where=query_set2)

2 个回答

2

我可以从两个方面理解你的问题。

  1. 你可以在过滤参数中指定多个变量,比如:

    q = Something.objects.filter(x=y, w=z)
    
  2. 你想在SQL中做一个叫“连接”的操作。这可以通过Django的聚合系统来实现,具体可以参考官方的Django官方文档

6

简单来说:不可以。extra 方法并不支持传入 querysets

想一想,这其实是有道理的。Querysets 是一种抽象概念,用来表示从数据库获取的结果,而 extra 是一种方便的方法,可以把数据库中的自定义字段添加到 queryset 中。除非你改变 extra 的基本定义,让它表示“用另一个 queryset 进行自定义过滤”,否则这样做是行不通的。

撰写回答