2010-08-19 5 views
1

Я делаю форму для регистрации пользователя. Вот что мой шаблон выглядит следующим образом:Django Form class question

<h1>Register</h1> 
    <form action="/register/" method="post"> 
     {{ form.as_p }} 
     <input type="submit" value="Register"> 
    </form> 

И вот мое мнение:

from djangoproject1.authentication import forms 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 

def main(request): 
    rform = forms.RegisterForm() 
    return render_to_response("authentication/index.html", {'form': rform}) 

def register(request): 
    if request.method == 'POST': 
     rform = forms.RegisterForm(request.POST) 
     if rform.is_valid(): 
      print 'VALID!' 
      # do something 
      return HttpResponseRedirect("/register-success/") 
     else: 
      print 'INVALID!' 
      rform = forms.RegisterForm() 
    return render_to_response("authentication/index.html", {'form': rform}) 

Я не получил действительную часть все же, я все еще работаю на недействительных частях. Вот моя форма выглядит так:

from django import forms 

class RegisterForm(forms.Form): 
    username = forms.CharField(min_length=6,max_length=15) 
    password = forms.CharField(widget = forms.PasswordInput(),min_length=6,max_length=15) 
    confirm_password = forms.CharField(widget = forms.PasswordInput(),min_length=6,max_length=15) 
    phone_number = forms.RegexField('\d\d\d-\d\d\d-\d\d\d\d',error_message='Invalid format') 

    def clean_password(self): 
     password = self.cleaned_data['password'] 
     confirm_password = self.cleaned_data['confirm_password'] 
     if password != confirm_password: 
      raise forms.ValidationError("Passwords don't match") 
     return password 

Имя пользователя, пароль, номер телефона. Довольно просто. Однако, когда я нажимаю «Register», не заполняя ничего, я должен получить кучу ошибок, но они нигде не появляются. Это должно произойти автоматически или я чего-то не хватает?

Спасибо!

ответ

2

Я думаю, ваша проблема в том, что в вашем другом вы сбросите форму на новую, и новая форма не была проверена. Попробуйте удалить эту строку кода из своего места

rform = forms.RegisterForm() 
+0

Да, если вы удалите эту строку, вы вернете недопустимую форму, в которой будут содержаться сообщения об ошибках для полей, которые остались пустыми. – nstehr

+0

так ответит на ваш вопрос? –

+0

Извините, немного побежал. Да, это действительно ответ на мой вопрос, однако, я все еще сталкиваюсь с проблемой. Я получаю исключение KeyError на «confirm_password». Я посмотрел KeyError и сказал, что Raised «когда ключ отображения (словаря) не найден в наборе существующих ключей». Из того, что я понимаю о cleaned_data, «confirm_password» должен быть там b/c, это поле, но я предполагаю, что это не – JPC