Django объединяет модели. DecimalField с формами -> ошибка: результат квантования имеет слишком много цифр для текущего контекста - PullRequest
5 голосов
/ 12 января 2010

Я хочу объединить десятичное поле модели с полем выбора форм.

Поле в модели:

sum = models.DecimalField(max_digits=2, decimal_places=2)

Поле в форме:

sum = forms.ChoiceField(choices=WORK_HOUR_CHOICES, label='Sum Working Hours', required=True)

На выбор:

WORK_HOUR_CHOICES = (
    (0, '0'),
    (0.5, '0.5'),
    (1, '1'),
    (1.5, '1.5'),
    (2, '2'),
    (2.5, '2.5')
)

Но всегда, когда я хочу сохранить значение с десятичным знаком, я получаю эту ошибку:

quantize result has too many digits for current context

Когда я сохраняю 0 или 1, он отлично работает.

Что не так?

1 Ответ

6 голосов
/ 12 января 2010

Это всего лишь предположение, но я уверен, что вам нужно поместить туда десятичные дроби:

WORK_HOUR_CHOICES = (
    (Decimal("0"), '0'),
    (Decimal("0.5"), '0.5'),
    (Decimal("1"), '1'),
    (Decimal("1.5"), '1.5'),
    (Decimal("2"), '2'),
    (Decimal("2.5"), '2.5')
)

Вы не можете инициализировать десятичную с помощью константы с плавающей запятой, вы должны использовать строку.

>>> from decimal import Decimal
>>> Decimal(1.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\software\Python25\lib\decimal.py", line 578, in __new__
    "First convert the float to a string")
TypeError: Cannot convert float to Decimal.  First convert the float to a string
>>> Decimal("1.5")
Decimal("1.5")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...