You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中使用jsonb_typeof注解过滤JSON数组类型对象失败求助

解决Django筛选JSON数组类型Rule对象的问题

问题原因

你的JsonbTypeof类未指定输出字段类型,导致Django执行过滤时无法正确识别jsonb_typeof返回的字符串类型——虽然values()能显示正确结果,但过滤条件因类型不匹配失效。

解决步骤

  1. 修改JsonbTypeof类,添加output_field指定为CharField:
from django.db.models import CharField, Func

class JsonbTypeof(Func):
    function = 'jsonb_typeof'
    output_field = CharField()
  1. 重新执行查询即可正常过滤:
Rule.objects.annotate(type=JsonbTypeof("data")).filter(type="array")

原理说明

jsonb_typeof返回的是小写字符串(如'array'),未指定output_field时,Django无法确定返回值的类型,过滤时会出现隐式类型转换问题。明确指定output_field = CharField()后,Django会按照字符串类型处理比较逻辑,确保过滤条件正确匹配。

内容的提问来源于stack exchange,提问作者Sergey M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:19:55