在一个 Django 项目中,我试图存储一个计算出的十进制值,但由于某些奇怪的原因它失败了。我的模型看起来像:
class FancyModel(models.Model):
fancy_field = models.DecimalField(max_digits=10, decimal_places=3, null=True, blank=True)
有时,实际上经常会在保存时崩溃:
django.db.utils.IntegrityError:CHECK 约束失败:myapp_fancy_model
我在一些挖掘之后发现是由这个验证引起的:
django.core.exceptions.ValidationError: {'fancy_field': ['确保不超过 2 位小数。']}
我已经丢弃了实际模型的值,对我来说似乎没问题:
{'fancy_field': 3.26 }
我不明白这怎么会失败。有时它工作正常,有时它会崩溃。我尝试使用圆形方法,例如:
model_instance.fancy_model = round(floating_value, 2)
但它仍然失败。
最佳答案
注释掉所有的代码,然后一行一行地添加回来,我发现这个错误根本不是由小数域引起的,而是一个 PositiveIntegerField 得到了一个负值。 model.full_clean() 根本没有提到 PositiveIntegerField,所以这真的很奇怪。那是几个小时我不会回来的:-/
关于python - Django 十进制字段无法存储应该没问题的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70513441/