python - Django 十进制字段无法存储应该没问题的 float

标签 python django floating-point decimal rounding

在一个 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/

相关文章:

python - 在while循环中如何使用while循环

python - Pandas 将不同大小的数据帧连接到列末尾

python - Django 的内联管理 : a 'pre-filled' field

floating-point - 为什么浮点基数是偶数?

java - 对于大 n,java.lang.Math.pow(x, n) 的准确/精确度如何?

python - Matplotlib 在第一帧后停止动画

python - 从 x、y、z 值绘制的 matplotlib 2D 图

python - Django 查询检索被选为外键的项目?

linux - Apache 上的 Django wtih mod_wsgi (Linux) - 403 禁止访问

java - JSlider替代品