gpt4 book ai didi

django-rest-framework - 如何获得Django Rest Framework将小数舍入到最大精度?

转载 作者:行者123 更新时间:2023-12-04 22:28:08 34 4
gpt4 key购买 nike

我有一个带有DecimalField的Django Rest Framework序列化程序

serializers.DecimalField(max_digits=9, decimal_places=6)

现在,如果我尝试反序列化包含更高精度(即50.1234567)的小数的数据,则序列化程序将引发ValidationError:
"Ensure that there are no more than 6 decimal places."

如果最后一位为0,甚至会发生这种情况。是否可以使序列化器将给定值四舍五入到最大精度(即50.1234567到50.123457)?如果是这样怎么办?

最佳答案

将输入强制为小数后,DecimalField会验证适当命名但未记录的validate_precision方法中值的精度。因此,要禁用此验证,可以覆盖此方法并仅返回输入值:

class RoundingDecimalField(serializers.DecimalField):
def validate_precision(self, value):
return value

事实证明,这样做足以获得所需的舍入行为。

调用 validate_precision后,DecimalField调用 quantize,它将“将十进制值量化为配置的精度”(来自文档字符串)。

此量化过程的舍入模式由当前 Activity 的十进制上下文控制。

如果需要一种特定的舍入模式,则可以使用 django-rest-framework-braces中的(再次未记录) drf_braces.fields.custom.RoundedDecimalField字段。该字段采用一个可选的舍入参数,可以在其中指定所需的 rounding mode

关于django-rest-framework - 如何获得Django Rest Framework将小数舍入到最大精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46949544/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com