【发布时间】:2015-02-20 09:50:51
【问题描述】:
我有一个类似的查询:Foo.objects.extra(select={'extra_column':'SELECT ...'}),我想过滤 extra_column,但我无法在过滤器上获取此别名。我正在考虑使用annotate(),但我不知道annotate() 可以在selectclause 上使用,所有教程都在SUM 等。我也尝试过HAVING 子句,但似乎Django 没有在extra() 上不支持HAVING。
任何建议将不胜感激。
编辑:
Django 1.6,MySQL
我正在查询一些复杂的条件,所以我必须使用extra() 来编写子查询。但我不能使用filter() 访问子查询的别名。如果我转向annotate(),它可以在以后访问filter(),但似乎它只适用于SUM, MAX, MIN, AVG,因此我不能在我的自定义SELECT子查询中使用它。
我在这里读到了类似的问题:Django ORM: Filter by extra attribute。它说在MySQL上查询别名时,需要使用HAVING子句。
我不知道这个问题是否也出现在其他 SQL 后端(如 PostgreSQL)或更高版本的 Django 上。可能Django1.6 with MySQL没有内置解决这个问题的办法?
【问题讨论】:
-
你能解释一下你想用额外的查询做什么吗?也许它可以通过连接甚至简单的注释来解决。另外,您使用的是哪个 Django 版本?
-
@Blackeagle52 已更新。
标签: django django-orm