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 条件过滤?