Django JSONField是无效查找

val*_*tev 7 python django postgresql json django-jsonfield

据我所知,你不能__isnull在django native上使用查找JSONField.在互联网上,我发现这个不活跃的问题.作为可能的解决方法,我们当然可以使用这些黑客:

  1. model.objects.filter(field__contains={'key': None}),这可能不是那么灵活,因为您可能需要查询多个键或其他任何内容.

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

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

Bob*_*Bob 5

根据此https://code.djangoproject.com/ticket/25718(请参阅最后一个结束语),以下内容应该可以工作 model.objects.filter(field__key=None)(但显然,您应该将Django版本与fix一起使用)。

django文档https://docs.djangoproject.com/zh-CN/2.0/ref/contrib/postgres/fields/#querying-jsonfield

警告

由于任何字符串都可能是JSON对象中的键,因此以下列出以外的任何查找都将被解释为键查找。没有错误。输入错误时要格外小心,并始终按预期检查查询的工作。

这里是https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#containment-and-key-operations