2015-01-11 2 views
0

У меня есть модель, которая содержит 2 поля типа PositiveSmallIntegerField. И у меня есть ModelForm для этой модели и этих полей.Проверка поля формы - кто делает ошибку?

Моя проверка работает отлично. Но если я набираю отрицательное число или буквенно-цифровую строку, я получаю ошибку проверки как своего рода всплывающее окно (см. Изображения ниже). Мой вопрос: является ли ошибка проверки, отображаемая браузером? Должна ли ошибка отображаться Django как HTML-код? И могу ли я перевести эту ошибку с помощью переводов django?

Кроме того, в моем clean методе формы У меня есть пользовательская проверка, и я делаю это:

if cleaned_data['capacity_min'] > cleaned_data['capacity_max']: 
    raise ValidationError(_("Some message")) 

я могу перевести эту и визуализируются как я ожидался, простой HTML-код страницы

Спасибо

Это то, что происходит с светлячок

enter image description here

Это то, что происходит с Google Chrome enter image description here

ответ

0

Эти ошибки намек которые показали в браузере. Браузер отклоняет отправку неверной формы на сервер, чтобы ваша проверка на django даже не запускалась.

Для решения этой проблемы измените виджет для вас поля от NumberInput к TextInput:

class MyForm(forms.ModelForm): 

    class Meta: 
     ... 
     widgets = { 
      'capacity_min': forms.TextInput(), 
      'capacity_max': forms.TextInput(), 
     } 
+0

Но если браузер имеет преимущество перед тем Джанго, это означает, что ошибки поля никогда не будут быть вынесены? и это полностью зависит от того, как клиент (пользователь) настроил свой браузер? –

+0

Да, современные браузеры делают некоторые проверки для '' полей, и вы не можете предотвратить это поведение. Но вы можете использовать 'type =" text "' вместо атрибута 'type =" number "' в вашей форме. – catavaran

+0

Я добавил пример переопределения виджета по умолчанию для полей формы. См. Документы: https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#overriding-the-default-fields – catavaran

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