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似乎不支持拥有onextra()
如有任何建议,我们将不胜感激
编辑:
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
生成的字段。