我有一个模特:
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.']}
为什么?
答案 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()