2013-07-29 2 views
0

У меня есть форма django, я пытаюсь добавить поддержку CAPTCHA. Однако, это требует от меня передать request.session к форме. Для достижения этой цели, я добавил этот конструктор в форме:Форма Django с __init__ не очищает поля

def __init__(self, request=None, *args, **kwargs): 
    super(RegistrationForm, self).__init__(*args, **kwargs) 
    self.request = request 

Затем я создания экземпляра RegistrationForm, передавая объект запроса к нему. Однако при отправке формы он не может очистить любое из полей. Он просто не выполняет проверку и передает пустое поле обратно в шаблон. Ниже приведен регистрационный код:

if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    if form.is_valid(): 
     ...do registration... 
    else: 
     return render(request, 'template.htm', {'form': form}) 

Независимо от того, что я помещал в полях, он никогда не проверяется. Фактически, он даже не похож на то, что он очищает поля. Я просто возвращаю новую пустую форму после нажатия кнопки регистрации, никаких ошибок, ничего.

Любые идеи?

+0

В блоке else вы можете положить 'form.errors' и посмотреть, что такое ошибка? – karthikr

+0

Вам нужно выполнить некоторую отладку самостоятельно; если это не известная проблема, ответить на информацию, представленную здесь, будет непросто. Поместите распечатываемые заявления здесь и там, чтобы узнать, что происходит с вашей формой. – asermax

ответ

2

Основываясь на коде, который вы отправили, похоже, что вы передаете request.POST в параметр request для вашего RegistrationForm. т.е. вы делаете эквивалент:

form = RegistrationForm(request=request.POST) 

То, что вы действительно хотите сделать это:

form = RegistrationForm(request=request, data=request.POST) 

Попробуйте это и посмотреть, если он работает для вас.

+0

Так оно и было. Спасибо! –

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