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

DecimalField конвертирует нуль в 0E-10

Django 1.6, Python 2.7.5+, PostgreSQL 9.1, Linux.

У меня есть несколько десятичных полей, определенных в модели следующим образом:

min_inclusive = models.DecimalField(_('minimum inclusive'), max_digits=19,
                    decimal_places=10,
                    help_text=_("Enter the minimum (inclusive) value for this concept."),
                    null=True, blank=True)

Через интерфейс администратора при вводе 0 (ноль) и сохранении объекта я получаю 0E-10 как значение.

Итак, почему он просто не хранит и не отображает нуль?

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

Это отображение, потому что 10 мест требуется? Если это так, то, используя виджет формы по умолчанию TextInput, мне кажется, что он должен просто расширяться до этого размера или, по крайней мере, прокручиваться до этого размера.

В PostgreSQL он хранится как 0.0000000000

4b9b3361

Ответ 1

Я также столкнулся с этой проблемой и обнаружил, что на самом деле все работает правильно. В Python, если вы на самом деле определите что-то вроде этого Decimal("0.0000000000") вы увидите это в консоли:

>>> Decimal("0.0000000000")
Decimal('0E-10')

В моей ситуации я конвертировал из SQLite3 бэкэнд в PostgreSQL для производства. В SQLite все работало нормально, потому что он явно не отображает (или хранит) все десятичные цифры. Поэтому, если вы вставите 0 в поле числа SQLite и затем выберите его, вы получите 0.

Но если вы вставите 0 в числовое поле PostgreSQL, он будет заполнять нулями десятичную дробь и вставит 0.0000000000. Поэтому, когда Python помещает это в десятичное число, вы увидите Decimal("0E-10").


ОБНОВИТЬ

Исправлено в Django 1.8