【问题标题】:Django filter has_key generates wrong SQLDjango 过滤器 has_key 生成错误的 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'" 但我认为这不是一个好的解决方案。

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

【问题讨论】:

  • 这可能值得提高票数。

标签: python django postgresql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2018-12-19
    • 2021-04-24
    • 1970-01-01
    • 2018-03-15
    • 2015-08-20
    相关资源
    最近更新 更多