Django DecimalField在保存时生成"量化结果对于当前上下文有太多数字"错误

goj*_*omo 16 python django decimal django-models

我有一个像这样的模型:

class ModelWithDecimal(models.Model):
    value = models.DecimalField(max_digits=2,decimal_places=2)
Run Code Online (Sandbox Code Playgroud)

......但是当我尝试......

obj = ModelWithDecimal(value="1.5")
obj.save()
Run Code Online (Sandbox Code Playgroud)

quantize result has too many digits for current context在保存期间收到错误.不应该没问题 - 它小于2位数,小数点后小于2位数?

模型发生同样的错误:

class ModelWithDecimal(models.Model):
    value = models.DecimalField(max_digits=11,decimal_places=8)
Run Code Online (Sandbox Code Playgroud)

......和尝试的实例......

obj = ModelWithDecimal(value="1005.7")
obj.save()
Run Code Online (Sandbox Code Playgroud)

再次,似乎它应该工作:只有4位总数(小于11),并且只有1位小数后(小于8).

怎么了?

goj*_*omo 32

问题是decimal_places每个实例都会消耗所有十进制数,无论你是否有非零数字,只留下(max_digits - decimal_places)十进制左边的数字.

因此DecimalField(max_digits=2,decimal_places=2),小数点左边有零位数字,"1.5"不适合.因为DecimalField(max_digits=11,decimal_places=8),小数点左边只有三位数字,"1005.7"不适合.

扩展您的max_digits,价值观将起作用.