2016-05-25 4 views
0

Я создал простую форму HTML не используя models.Model в models.py, ModelForm в forms.py и Oldschool шаблонов Django (ничего фантазии)Джанго текст в результатах SmallIntegerField в KeyError

Если пользователь вводит текст в поле числа и отправляет форму, сервер возвращает KeyError

Примера: следующее поле «высота»:

class DataRegistryPart2(models.Model): 
    height = models.SmallIntegerField(blank=True, null=True) 

будет отображаться как HTML ввод в шаблоне:

<input id="id_height" name="height" type="number"> 

Im используя пользовательскую проверку в forms.py:

... 
def clean(self): 
    cleaned_data = super(CreatePatient, self).clean() 
    height = cleaned_data["height"] # <-- This is where the KeyError happens! 

Если пользователь вводит текст или десятичных номер в поле ввода и отправляет форму HTML, Django возвращает исключение KeyError.

Как я могу предотвратить это (без использования try/catch).

Thanx!

ответ

1

Если вы вводите недопустимые значения в поле, это поле по определению не очищается, поэтому оно не будет присутствовать в cleaned_data; следовательно, KeyError.

Если вам не нужно это значение, чтобы выполнить некоторую проверку в сочетании с другим полем, вы должны делать все, что вы делаете, в конкретном методе clean_height; это будет вызываться только в том случае, если значение передает встроенную проверку поля.

+0

Спасибо за ваш ответ! Похоже, что это действительно плохая идея использовать чистую функцию вообще - очень вероятно, что пользователь вводит недействительные данные в форму, которая разбивает систему. Возможно, я что-то не понимаю, но сейчас мне трудно увидеть использование чистой функции. Может быть, вы можете уточнить? – Vingtoft

+0

Нет, не совсем. Как я уже сказал, это делается для проверки в более чем одной области; в этом случае вы можете использовать 'cleaned_data.get ('fieldname')' для доступа к потенциально отсутствующему значению без запуска KeyError. –

+0

Благодарим вас за разъяснение. – Vingtoft

Смежные вопросы