【发布时间】:2015-07-08 23:04:35
【问题描述】:
我需要通过JsonField查询模型,我想获取所有具有空值([])的记录:
我使用了MyModel.objects.filter(myjsonfield=[]),但它不起作用,它返回 0 结果虽然有记录有myjsonfield=[]
【问题讨论】:
标签: python django django-jsonfield
我需要通过JsonField查询模型,我想获取所有具有空值([])的记录:
我使用了MyModel.objects.filter(myjsonfield=[]),但它不起作用,它返回 0 结果虽然有记录有myjsonfield=[]
【问题讨论】:
标签: python django django-jsonfield
为此使用dunder __exact。 __isnull=True 不起作用,因为 JSONField 在技术上不为空。
myjsonfield 为空的 MyModel 条目:
MyModel.objects.include(myjsonfield__exact=[])
myjsonfield 为 非为空的 MyModel 条目:
MyModel.objects.exclude(myjsonfield__exact=[])
https://docs.djangoproject.com/en/3.1/ref/models/querysets/#std:fieldlookup-exact
我相信如果您在模型中设置了default=dict,那么您应该使用{}(例如:myjsonfield__exact={})而不是[],但我没有对此进行测试。
【讨论】:
JSONfield 应该是 default={} 即字典,而不是列表。
【讨论】:
default=dict 或 default=list 因为 JSON 可以是字典或列表。不要将其设置为 {} 或 [] 的实际值,也不要实际调用该函数(例如 dict())。将其设置为产生该值的函数的名称。当需要设置默认值时会调用它。
试试MyModel.objects.filter(myjsonfield='[]')。
【讨论】: