Как сделать проверку на идентичность двух полей без POST запроса? Django

Короче, спустя тыщу лет, я опять возвращаюсь к этому вопросу. Решить его мне пока не удалось.
Чтоб сделать так, как я хочу - надо прикрутить 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))

Всем спасибо за помощь :(
  • Вопрос задан
  • 2787 просмотров
Пригласить эксперта
Ответы на вопрос 1
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
ипользуйте вот эту либу https://github.com/agiliq/Django-parsley тут и валидация на клиенте и на сервере есть.

Ошибки нужно передпапть в шаблон и там выводить а не через
print form_registration.errors
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы