Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2008 17:56:04

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

DecimalField не валидирует NaN и inf

Случайно заметил такое явление: когда форма с DecimalField валидируется, если в поле вписано NaN или inf вываливается TypeError

File "/usr/lib/python2.5/site-packages/django/forms/forms.py" in full_clean
224. value = field.clean(value)
File "/usr/lib/python2.5/site-packages/django/forms/fields.py" in clean
254. decimals = abs(exponent)

Exception Type: TypeError at ...
Exception Value: bad operand type for abs(): 'str'
Катит на тикет или я что то не так делаю?
Кстати, вот интересно это http://code.djangoproject.com/ticket/7777



Офлайн

#2 Окт. 29, 2008 18:27:16

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

DecimalField не валидирует NaN и inf

И не должна. NaN - это в джаваскрипте, а в питоне None. NaN понимается как строка, тогда как форма ждёт decimal.
Если передавать None и указать в опциях поля null=Truе - всё будет ок.

Офлайн

#3 Окт. 30, 2008 15:12:18

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

DecimalField не валидирует NaN и inf

Ferroman
И не должна. NaN - это в джаваскрипте, а в питоне None.
В питоне это float('nan')(или Decimal(“NaN”)). А питоновский None в JS - null.



Офлайн

#4 Окт. 30, 2008 15:35:24

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

DecimalField не валидирует NaN и inf

Ммм, что-то я запутался.

NaN в джаваскрипт - “Not-a-Number”, в питоне/django аналога не знал - не попадалось.
А так, да None === null

В джанго есть похожий тикет как у топикстартера.

Офлайн

#5 Окт. 30, 2008 21:59:19

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

DecimalField не валидирует NaN и inf

Все верно вы говорите. И как раз таки в результате работы JS в поле попадает NaN. Это нормально. Дело в другом. Любая строка не проходит проверки, как это положено быть – пишет “Введите число”. Но NaN и inf вызывают вместо ValidationError райзят TypeError, т.е. приложение не отрабатывает валидацию.



Отредактировано (Окт. 30, 2008 22:00:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version