jaa*_*ap3 4 decimal rounding django-rest-framework
我有一个带有DecimalField的Django Rest Framework序列化程序
serializers.DecimalField(max_digits=9, decimal_places=6)
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试反序列化包含具有更高精度的十进制数据(即50.1234567),则序列化程序会引发ValidationError:
"Ensure that there are no more than 6 decimal places."
Run Code Online (Sandbox Code Playgroud)
如果最后一位数为0,甚至会发生这种情况.是否可以使串行器将给定值舍入到最大精度(即50.1234567到50.123457)?如果是这样怎么样?
jaa*_*ap3 10
在将输入强制转换为Decimal后,DecimalField会验证恰当命名但未记录的validate_precision方法中的值的精度.因此,要禁用此验证,可以覆盖此方法并只返回输入值:
class RoundingDecimalField(serializers.DecimalField):
def validate_precision(self, value):
return value
Run Code Online (Sandbox Code Playgroud)
事实证明,这样做足以获得所需的舍入行为.
调用validate_precisionDecimalField调用后quantize,将"将十进制值量化为配置的精度"(来自docstring).
该量化过程的舍入模式由当前有效的小数上下文控制.
如果需要特定的舍入模式,可以使用drf_braces.fields.custom.RoundedDecimalField来自django-rest-framework-braces的(再次未记录的)字段.该字段采用可选的舍入参数,其中可以指定所需的舍入模式.