Django 过滤器 has_key 生成错误的 SQL

Posted

技术标签:

【中文标题】Django 过滤器 has_key 生成错误的 SQL【英文标题】:Django filter has_key generates wrong SQL 【发布时间】:2020-12-27 10:59:52 【问题描述】:

我需要过滤一些在字段中没有特定值的对象。我试着这样做:

MyModel.objects\
    .filter(<some filters>)\
    .exclude(json_field__has_key='some_field', json_field__some_field=True)

但是这段代码生成了错误的 SQL 查询:

... 
AND NOT (
    "my_model"."json_field" ? some_field AND
    ("my_model"."json_field" -> 'some_field') = 'true' AND
    "my_model"."json_field" IS NOT NULL)
)
...

在第一行 some_field 没有使用 qoutes。我通过在字符串中添加单个 qoutes 来修复它:json_field__has_key="'some_field'" 但我认为这不是一个好的解决方案。

有谁知道它为什么会这样工作以及我应该如何解决它?

【问题讨论】:

这可能值得提高票数。 【参考方案1】:

好吧,我的坏... 我刚刚将我的查询记录为queryset.query,这对 SQL 查询的表示非常错误。当我使用连接器记录真实查询时,我看到了正确的查询(有关详细信息,请参阅this answer)。

【讨论】:

以上是关于Django 过滤器 has_key 生成错误的 SQL的主要内容,如果未能解决你的问题,请参考以下文章

PythonDjango filter 如何支持 or 条件过滤?

在生成 django 管理 URL 时覆盖查询集过滤器

Django 模板过滤器语法错误

“模板语法错误:过滤器无效:”;基于 django 文档的自定义 django 模板过滤器损坏,但模板标签有效

Django 自定义过滤器错误。返回“无效过滤器”

GraphQL 食谱示例中的 Django 过滤器错误