Decimal无法序列化为JSON
我有一个计算,用来在用户结账时计算税费,我的商店框架是Cartridge
。
计算公式是:tax = tax * Decimal(str(settings.SHOP_DEFAULT_TAX_RATE))
。
这个计算是正常的。然后我把tax
传给set_tax(request, _("GST+PST"), tax)
。
但是这样做时,我遇到了一个错误:Decimal('12.0') is not JSON serializable
,意思是说这个数字格式不对,不能被转换成JSON格式。
当我把它转换成浮点数(set_tax(request, _("GST+PST"), float(tax))
)时就可以了;但是在结账时又出现了另一个错误:
unsupported operand type(s) for +=: 'Decimal' and 'float'
,这表示我不能把一个Decimal类型的数字和一个浮点数相加。
在我的设置中:
SHOP_DEFAULT_TAX_RATE = 0.12
我看到有些解决方案提到需要使用自定义的JSON编码器,但这个错误是在Django内部发生的。
谢谢。
1 个回答
3
这个问题在几周前已经修复了,但还没有发布新版本:
https://github.com/stephenmcd/cartridge/commit/628bd203f39a62d9de2613de7057e6742657111f
幸运的是,你现在可以把开发版作为依赖项添加进来。
顺便说一下,使用小数类型是正确的选择。