据我所知,您不能在Django原生的JSONField上使用__isnull查询。在互联网上,我找到了this无效的问题。
作为可能的解决方法,我们当然可以使用以下这些方法:
model.objects.filter(field__contains={'key': None})
,这不是很灵活,因为您可能需要查询多个键或其他内容。model.objects.exclude(field__key=True).exclude(field__key=False)
,这是hacky的,并且仅适用于布尔数据。
field__key__isnull=True
也应该可以工作。终于在这些年之后,这个问题有了答案。谢谢! - valignatevfield__key__isnull=True
正常工作。查看上面链接中的代码更改,JSONExact
查找被添加,因此对我来说field__key__exact=None
也可以正常工作。 - djbpmodel.objects.filter(field__is_null=True)
或model.objects.filter(field__is_null=False)
错误地使用is_null
而不是isnull
将始终返回一个空的查询集,没有错误,因为它正在寻找一个叫做is_null
的键。 - Ben Sturmfels.exclude(field__key__isnull=True)
在Django 4.1中仍然无效,但__exact=None
有效。 - Tim Richardson