Подтвердить что ты не робот

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).

Что случилось?

4b9b3361

Ответ 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 и значения будут работать.