2012-12-18 235 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