Форум сайта python.su
Случайно заметил такое явление: когда форма с 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'
Офлайн
И не должна. NaN - это в джаваскрипте, а в питоне None. NaN понимается как строка, тогда как форма ждёт decimal.
Если передавать None и указать в опциях поля null=Truе - всё будет ок.
Офлайн
FerromanВ питоне это float('nan')(или Decimal(“NaN”)). А питоновский None в JS - null.
И не должна. NaN - это в джаваскрипте, а в питоне None.
Офлайн
Ммм, что-то я запутался.
NaN в джаваскрипт - “Not-a-Number”, в питоне/django аналога не знал - не попадалось.
А так, да None === null
В джанго есть похожий тикет как у топикстартера.
Офлайн
Все верно вы говорите. И как раз таки в результате работы JS в поле попадает NaN. Это нормально. Дело в другом. Любая строка не проходит проверки, как это положено быть – пишет “Введите число”. Но NaN и inf вызывают вместо ValidationError райзят TypeError, т.е. приложение не отрабатывает валидацию.
Отредактировано (Окт. 30, 2008 22:00:56)
Офлайн