Django JSONField是无效查找

时间:2016-07-22 14:06:23

标签: python json django postgresql django-jsonfield

据我所知,您无法在django native __isnull上使用JSONField次查找。在互联网上,我发现this无效问题。 作为可能的解决方法,我们当然可以使用这些黑客:

  1. model.objects.filter(field__contains={'key': None}),由于您可能需要查询多个密钥或其他内容,因此不够灵活。

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

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

1 个答案:

答案 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