Короче, спустя тыщу лет, я опять возвращаюсь к этому вопросу. Решить его мне пока не удалось.
Чтоб сделать так, как я хочу - надо прикрутить AJAX.
Я это делать пока не хочу и не умею.
Что я щас хочу сделать: чтобы это бы проверка осуществлялась не мгновенно, а при нажатии на кнопку, которая активирует POST запрос.
Что у меня есть: я переопределила методы clean_filename:
def clean_password(self):
value_password = self.cleaned_data.get('password')
if len(str(self.cleaned_data['password'])) < 6:
raise forms.ValidationError({'password': ["Password must been more then 6 symbols"]})
elif len(str(self.cleaned_data['password'])) > 45:
raise forms.ValidationError({'password': ["Password must been less 45 symbols"]})
elif value_password is None:
raise forms.ValidationError({'password': ["Field of password can't are blank"]})
return value_password
Аналогично переопределила метод clean_password2.
Делаю проверку в методе на идентичность:
def clean(self):
super(Form_registration, self).clean()
data = self.cleaned_data
if data["password"] != data["password2"]:
raise ValidationError({'password2': ["Password must been are equals"]})
return data
Вот что в templates:
{{ form_registration.non_field_errors }}
#всякая ерундистика
<div class="fieldWrapper">
{{ form_registration.password }}
<label for="id_password"></label>
{{ form_registration.password.errors }}
</div>
<div class="fieldWrapper">
{{ form_registration.password2 }}
<label for="id_password2"></label>
{{ form_registration.password2.errors }}
</div>
ValidationError, если происходит, то пишется прям в аккурат наверху страницы :-S. Хотя в шаблоне - сначала поле, а потом errors. - Как это исправить?
Еще, если поле пустое, а не должно - всплывает ошибка - Обязательное поле. Мне надо этот текст переписать срочно. Оно из errorlist, по умолчанию оно выглядит так:
class DivErrorList(ErrorList):
def __str__(self): # __unicode__ on Python 2
return self.as_divs()
def as_divs(self):
if not self:
return ''
return '<div class="errorlist">%s</div>' % ''.join(['<div class="error">%s</div>' % e for e in self])
Как здесь что переписать не представляю.
Но самая главная проблема: я ввожу какие-то данные в свои поля, нажимаю на кнопку. адрес моего урл меняется на: адрес_сайта/saves/. Я опять ввожу какие-то данные (допустим, правильные), нажимаю на кнопку - адрес_сайта/saves - Данные не заносятся в БД. Вообще не знаю что делать. Надо как-то перезагрузить страницу что ль (хотя и это не помогает). - Вобщем, если что-то сохраняется, то только с первой попытки. Может, конечно, я что при сохранении делаю неправильно:
def saves_data_user_on_registration (request):
c = {}
form_registration = Form_registration(request.POST, request.FILES, error_class=DivErrorList)
c['form_registration'] = form_registration
if request.method == 'POST':
c.update(csrf(request))
if form_registration.is_valid():
form_registration.save()
return render_to_response('see_you_later.html', c,
context_instance=RequestContext(request))
else:
print form_registration
return render_to_response('first_page.html', c,
context_instance=RequestContext(request))
Всем спасибо за помощь :(