据我所知,您无法在django native __isnull
上使用JSONField
次查找。在互联网上,我发现this无效问题。
作为可能的解决方法,我们当然可以使用这些黑客:
model.objects.filter(field__contains={'key': None})
,由于您可能需要查询多个密钥或其他内容,因此不够灵活。
model.objects.exclude(field__key=True).exclude(field__key=False)
,这是hacky,仅适用于布尔数据。
我希望有更好的方法((c)Raymond Hettinger)这样做。任何建议将不胜感激。现在,我将采用第一种方法
答案 0 :(得分:4)
根据这个https://code.djangoproject.com/ticket/25718(参见上一篇,结束评论),以下内容应该有效model.objects.filter(field__key=None)
(但显然你应该使用带修复的Django版本)。< / p>
django docs https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#querying-jsonfield
警告
由于任何字符串都可以是JSON对象中的键,因此任何其他字符串都可以查找 比下面列出的将被解释为键查找。没有错误 被提出来了。键入错误要格外小心,并经常检查 您的查询按预期工作。
这里他们是https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#containment-and-key-operations