Django DecimalField генерирует "результат квантования имеет слишком много цифр для текущего контекста" ошибка при сохранении
У меня есть модель вроде:
class ModelWithDecimal(models.Model):
value = models.DecimalField(max_digits=2,decimal_places=2)
... еще, когда я пытаюсь...
obj = ModelWithDecimal(value="1.5")
obj.save()
Я получаю ошибку quantize result has too many digits for current context
во время сохранения. Не должно быть в порядке - это меньше 2 цифр и менее 2 цифр после десятичной точки?
То же самое происходит с моделью:
class ModelWithDecimal(models.Model):
value = models.DecimalField(max_digits=11,decimal_places=8)
... и попытка экземпляра...
obj = ModelWithDecimal(value="1005.7")
obj.save()
Опять же, похоже, он должен работать: всего 4 цифры (менее 11) и только 1 после десятичной (меньше 8).
Что случилось?
Ответы
Ответ 1
Проблема заключается в том, что все правые-десятичные 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
и значения будут работать.