Django中使用jsonb_typeof注解过滤JSON数组类型对象失败求助
解决Django筛选JSON数组类型Rule对象的问题
问题原因
你的JsonbTypeof类未指定输出字段类型,导致Django执行过滤时无法正确识别jsonb_typeof返回的字符串类型——虽然values()能显示正确结果,但过滤条件因类型不匹配失效。
解决步骤
- 修改
JsonbTypeof类,添加output_field指定为CharField:
from django.db.models import CharField, Func class JsonbTypeof(Func): function = 'jsonb_typeof' output_field = CharField()
- 重新执行查询即可正常过滤:
Rule.objects.annotate(type=JsonbTypeof("data")).filter(type="array")
原理说明
jsonb_typeof返回的是小写字符串(如'array'),未指定output_field时,Django无法确定返回值的类型,过滤时会出现隐式类型转换问题。明确指定output_field = CharField()后,Django会按照字符串类型处理比较逻辑,确保过滤条件正确匹配。
内容的提问来源于stack exchange,提问作者Sergey M
相关产品推荐
相关产品推荐

