Django JSONField isnull 查找

Posted

技术标签:

【中文标题】Django JSONField isnull 查找【英文标题】:Django JSONField isnull lookup 【发布时间】:2016-11-26 11:30:39 【问题描述】:

据我所知,您不能在 django 本机 JSONField 上使用 __isnull 查找。在互联网上我发现this 不活跃的问题。 作为可能的解决方法,我们当然可以使用这些技巧:

    model.objects.filter(field__contains='key': None),不太灵活,因为您可能需要查询多个键或其他任何内容。

    model.objects.exclude(field__key=True).exclude(field__key=False),这很hacky,仅适用于布尔数据。

我希望有更好的方法((c) Raymond Hettinger)来做这件事。任何建议将不胜感激。现在,我将采用第一种方法

【问题讨论】:

【参考方案1】:

根据this(见最后一条,结束评论),以下应该可以工作model.objects.filter(field__key=None)(但显然你应该使用带有修复程序的Django版本)。

django docs

警告

由于任何字符串都可以是 JSON 对象中的键,因此任何查找其他 比下面列出的那些将被解释为键查找。没有错误 被提出。输入错误要格外小心,并经常检查 您的查询按您的意愿工作。

和here 他们是

【讨论】:

似乎field__key__isnull=True 也应该可以工作。这么多年过去了,这个问题终于有了答案。谢谢! 我无法让field__key__isnull=True 工作。查看上面链接中的代码更改,添加了JSONExact 查找,所以对我来说field__key__exact=None 也可以工作。

以上是关于Django JSONField isnull 查找的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:模块 'django.contrib.postgres.fields' 没有属性 'JSONField'

django jsonfield 保存到数据库

Django JSONField 不保存 0 值

Django 1.9 JSONField 更新行为

Django JSONField 过滤

django orm JSONField for mysql