DecimalField不接受浮点数

时间:2017-11-30 10:53:54

标签: python django

我有一个模特:

Model(models.Model)
    price = models.DecimalField(max_digits=10, decimal_places=2)

我有一个字符串:

new_price = "39.99"

当我尝试以下操作时:

model_instance.price = float(new_price)
model_instance.save()

我得到django.core.exceptions.ValidationError: {'price': ['Ensure that there are no more than 10 digits in total.']}

为什么?

2 个答案:

答案 0 :(得分:2)

这与Python's internal float representation's limitations有关。但您可以使用DecimalField

直接使用字符串
model_instance.price = "39.99"
model_instance.save()

如果您有动态输入,可以直接使用decimal.Decimal来获得所需的精度:

from decimal import *

model_instance.price = Decimal(new_price).quantize(
    Decimal('0.01'), 
    rounding=ROUND_HALF_UP)

答案 1 :(得分:0)

尝试使用decimal.Decimal而不是float()