2012-12-18 196 views
2

任何人都可以在下面的示例中發現我做錯了什麼。輸入不正確的詳細信息時,驗證消息不會顯示在我的模板中,例如無效的電子郵件地址。該模板正在加載並且沒有錯誤。Django窗體:驗證消息不顯示

我除了驗證消息要打印在頁面上,但由於某些原因,這突然停止工作。正如你從下面的代碼示例中看到的,我將上下文中的表單傳遞迴模板。這曾經工作,今天剛剛停止。

view.py

if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      # If form has passed all validation checks then continue to save member. 
      user = User.objects.create_user(
              username=form.cleaned_data['username'], 
              email=form.cleaned_data['email'], 
              password=form.cleaned_data['password'] 
              ) 
      user.save() 
      #member = User.get_profile() 
      #member.name = form.cleaned_data['name'] 
      #member.save() 
      member = Member(
          user=user, 
          name=form.cleaned_data['name'] 
          ) 
      member.save() 

      # Save is done redirect member to logged in page. 
      return HttpResponseRedirect('/profile') 
     else: 
      # If form is NOT valid then show the registration page again. 
      form = RegistrationForm() 
      context = {'form':form} 
      return render_to_response('pageRegistration.html', context,context_instance=RequestContext(request)) 

form.py

class RegistrationForm(ModelForm): 
    username = forms.CharField(label=(u'User Name')) 
    email = forms.EmailField(label=(u'Email')) 
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False)) 
    passwordConfirm = forms.CharField(label=(u'Confirm Password'), widget=forms.PasswordInput(render_value=False)) 

    class Meta: 
     model = Member 
     # Don't show user drop down. 
     exclude = ('user',) 


    def clean_username(self): 
     username = self.cleaned_data['username'] 
     try: 
       User.objects.get(username=username) 
     except User.DoesNotExist: 
       return username 
     raise forms.ValidationError("Username already taken.") 


    def clean(self): 
     try: 
      cleaned_data = super(RegistrationForm, self).clean() 
      password = cleaned_data.get("password") 
      passwordConfirm = cleaned_data.get('passwordConfirm') 

      if password != passwordConfirm: 
       raise forms.ValidationError("Password does not match, try again.") 
      return cleaned_data 
     except: 
      raise forms.ValidationError("Error") 

pageRegistration.html

<form action="" method="POST"> 
      {% csrf_token %} 

      {% if forms.errors %} 
      <p> 
       correct some stuff 
      </p> 
      {% endif %} 

      {{form}} 
      <br> 
      <input type="submit" value="submit"> 
     </form> 

回答

4

由於,形式是無T中的其他條款中驗證表單變量被重寫以新的形式,然後失去全部更新爲CBV世界中的錯誤

if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      # If form has passed all validation checks then continue to save member. 
      user = User.objects.create_user(
              username=form.cleaned_data['username'], 
              email=form.cleaned_data['email'], 
              password=form.cleaned_data['password'] 
              ) 
      user.save() 
      #member = User.get_profile() 
      #member.name = form.cleaned_data['name'] 
      #member.save() 
      member = Member(
          user=user, 
          name=form.cleaned_data['name'] 
          ) 
      member.save() 

      # Save is done redirect member to logged in page. 
      return HttpResponseRedirect('/profile') 
     return render_to_response('pageRegistration.html', context,context_instance=RequestContext(request)) 
+0

通過移除形式= RegistrationForm()現在的工作,也許這是清除表單好嗎? – Prometheus

+0

是的,只是嘗試重新排列應該這樣做的代碼 –

1

的。

這是什麼導致相當於錯誤對我來說:

class CreateView(generic.CreateView): # or generic.UpdateView 

    def get_context_data(self, **kwargs): 
     context_data = super(CreateView, self).get_context_data(**kwargs) 
     # context_data['form'] = self.form_class # << this was the problematic override