gpt4 book ai didi

Django:如何过滤额外的列?

转载 作者:行者123 更新时间:2023-12-05 05:26:10 27 4
gpt4 key购买 nike

我有一个类似这样的查询:Foo.objects.extra(select={'extra_column':'SELECT ...'}),我想在 extra_column,但我无法在过滤器上获得此别名。我正在考虑使用 annotate(),但我不知道 annotate() 可以在 select 子句上使用,所有教程都在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 中没有内置的解决方案?

最佳答案

作为类似问题的正确标记答案,提及;不可能使用过滤器(因为 filter() 只检查模型定义)。它建议使用另一个包含 where 子句的 extra

类似的东西;

Foo.objects\
.extra(select={'extra_column':'SELECT ...'})\
.extra(where=["extra_column = %s"], params=[value])

从 Django 1.7 开始,您可以使用查找:
https://docs.djangoproject.com/en/1.7/howto/custom-lookups/

关于Django:如何过滤额外的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com