Я думаю, что процесс проверки формы (и ее правильный порядок) действительно хорошо документирован.http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-and-field-validation
Не могли бы вы поделиться своим кодом?В каждом поле формы есть метод clean
, отвечающий за запуск to_python
, validate
и run_validators
(в этом порядке).to_python
принимает необработанное значение виджета, приводя его к типу Python, validate
принимает приведенное значение и выполняет валидацию для конкретного поля.
Ответ обновляется в соответствии с заданным кодом
clean_message
вызывается после того, как все остальные проверки выполняются как to_python
, validate
и, самое главное, run_validators
.Я думаю, что последний метод проверит, что ограничение max_length
не нарушено.Таким образом, изменение данных впоследствии никак не повлияет.
Решение состоит в том, чтобы поднять ValidationError
здесь.Удаление max_length
позволит избежать проверки длины ввода.
class ContactForm(forms.Form):
message = forms.CharField(widget=forms.Textarea)
def clean_message(self):
message = self.cleaned_data['message']
message = message.replace('a', '') # remove all "a"s from message
if len(message) >= 5:
raise ValidationError('Too many characters ...')
return message