Django:如何过滤额外的列?

Django:如何过滤额外的列?,django,django-orm,Django,Django Orm,我有这样一个查询:Foo.objects.extra(select={'extra_column':'select…}),我想在extra_column上进行筛选,但我无法在筛选中获取此别名。我正在考虑使用annotate(),但我不知道annotate()是否可以使用select子句,所有教程都是关于SUM等的。我也尝试过拥有子句,但Django似乎不支持拥有onextra() 如有任何建议,我们将不胜感激 编辑: Django 1.6,MySQL 我正在查询一些复杂的条件,因此我必须使用ex

我有这样一个查询:
Foo.objects.extra(select={'extra_column':'select…})
,我想在
extra_column
上进行筛选,但我无法在筛选中获取此别名。我正在考虑使用
annotate()
,但我不知道
annotate()
是否可以使用
select
子句,所有教程都是关于
SUM
等的。我也尝试过
拥有
子句,但Django似乎不支持
拥有
on
extra()

如有任何建议,我们将不胜感激

编辑:

Django 1.6,MySQL

我正在查询一些复杂的条件,因此我必须使用
extra()
来编写子查询。但是我不能使用
filter()
访问子查询的别名。如果我转到
annotate()
,它可以在以后的
filter()
中访问,但它似乎只适用于
SUM、MAX、MIN、AVG
,因此我无法在我的自定义
SELECT
子查询中使用它

我在这里读到了类似的问题:。它说在MySQL上查询别名时,需要使用
HAVING
子句


我不知道这个问题是否也出现在其他SQL后端,比如PostgreSQL,或者更高版本的Django上。也许Django1.6中没有内置的MySQL解决方案?

类似问题的正确标记答案提到;无法使用过滤器(因为
filter()
仅检查模型定义)。建议使用另一个
额外的
,其中包含where子句

比如说

Foo.objects\
    .extra(select={'extra_column':'SELECT ...'})\
    .extra(where=["extra_column = %s"], params=[value])
从Django 1.7开始,您可以使用查找:

你能解释一下你想用这个额外的查询做什么吗?也许可以通过连接甚至简单的注释来解决。另外,您使用的是哪个Django版本?@Blackeagle52已更新。实际上,extra将在SQL中呈现where子句。但是在MySQL中,您需要在这里使用。所以我最终使用了原始SQL。这个例子不起作用。它在MySQL数据库上引发了
操作错误:(1054,“where子句”中的未知列'extra_column')
。不能在另一个
extra
子句中使用使用
extra
生成的字段。