** Я перешел от среды. Новый адрес kodare.net **
У форм в Django есть особенность, которая по сути возникает из. Однако это может быть неочевидно, пока вас не укусят несколько раз. Возьмем очень простой пример:
class MyForm(forms.Form): foo = forms.CharField() def clean_foo(self): if self.cleaned_data['foo'] == 'bar': raise forms.ValidationError('bar is an invalid value')
Просто потому, что имя метода соответствует шаблону clean_<field_name>
, он вызывается. В определении foo
нет ничего, что связывало бы его с методом clean. Это чревато ошибками, потому что если вы переименуете поле и забудете переименовать метод очистки, он не будет вызван. Если бы только Django подтвердил, что все методы, соответствующие шаблону clean_<name>
, соответствуют имени действительно существующего поля, это не было бы таким хрупким.
Это была одна из многих причин, по которым мы написали замену библиотеке форм. Посмотрите на тот же пример в tri.form:
class MyForm(Form): foo = Field.text(is_valid=lambda value, **_: (value != 'bar', "bar is an invalid value"))
Исчез риск сломать что-то из-за того, что ваши строковые тексты не выстраиваются в линию (и мы избавляемся от большого количества шаблонов в качестве бонуса).