【Django】【MySQL】Django中使用MySQL Decimal数据后报错Object of type Decimal is not JSON serializable解决办法

【Django】【MySQL】Django中使用MySQL Decimal数据后报错Object of type Decimal is not JSON serializable解决办法_第1张图片

其实这个错误用不着去修改数据库中的数据类型

当MySQL里面的Decimal类型需要传入request进行暂存时,Django的框架会调用一个json.dumps

【Django】【MySQL】Django中使用MySQL Decimal数据后报错Object of type Decimal is not JSON serializable解决办法_第2张图片

可以发现这里user_id是Decimal('0'),麻中麻

把Decimal类型的数据按照情况,转换成int、float、str进行保存就行了

【Django】【MySQL】Django中使用MySQL Decimal数据后报错Object of type Decimal is not JSON serializable解决办法_第3张图片

这样传request参数的时候就可以正常传入啦!

改完这个之后就可以正常运行了

看到之前写的好多博客

如果是我们手动使用json.dumps的话,里面如果有Decimal也会报这个错

大部分博客通过向json.dumps里面的传入自定义的cls类解决了这个问题

但这个方法在Django框架下并不好使用,因为json.dumps被封装了非常多层,很难找到从request中传入Decimal元素序列化类的接口,所以,在传入的时候把Decimal值手动修改一下,就可以避免这种问题。

还有小部分博客直接把数据库里面所有Decimal全部改成了str,由于改这个的话相当于得从ER层开始全部修改,数据库设计就前功尽弃了,所以我没舍得改。后来发现了问题的原因在于request传参,这才恍然大悟,只需要把传入request的Decimal参数转一下类型就行了。

你可能感兴趣的:(django,mysql,json)