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
Ответы
Ответ 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