2010-08-20 73 views
0

我在我的主页上有一个表单。我对此的看法如下所示:Django ModelForm验证没有提交

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

def main(request): 
    uf = forms.UserForm() 
    upf = forms.UserProfileForm() 
    return render_to_response("authentication/index.html", {'form1': uf, 'form2':upf}) 

def register(request): 
    if request.method == 'POST': 
     uf = forms.UserForm(request.POST) 
     upf = forms.UserProfileForm(request.POST) 
     if uf.is_valid() and upf.is_valid(): 
      user = uf.save(commit=False) 
      user.set_password(uf.cleaned_data["password"]) 
      user.save() 
      userprofile = upf.save(commit=False) 
      userprofile.user = user 
      userprofile.save() 
      return HttpResponseRedirect("/register-success/") 
    return render_to_response("authentication/index.html", {'form1': uf,'form2':upf}) 

它使这两部分形成一个表格。但是,当我启动我的浏览器时,所有错误消息都已出现。我认为这让他们不受约束,因此他们不会尝试和验证,因为我没有发布任何内容。

这里的表单代码:

from django import forms 
from django.contrib.auth.models import User 
from djangoproject1.authentication.models import UserProfile  

class UserForm(forms.ModelForm): 
    cpassword = forms.PasswordInput() 

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

    class Meta: 
     model = User 
     fields = ('username','email','password',) 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('phonenumber',) 

这里的HTML:

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

对于您向我们显示的代码,这是不可能的。这真的是你使用的完整视图吗?也显示你的模板代码。 – 2010-08-20 08:07:33

+0

编辑了我的原代码帖子 – JPC 2010-08-20 14:47:42

回答

0

原来,这不是错误,而是帮助文本。

0

从你所描述的东西,它好像你打了register视图具有无效POST。但是当你转到页面时,你会说这发生在main视图上?

不存在任何未绑定表单的表单错误(例如main会返回),但在register调用失败的is_valid后,它们将显示在绑定的表单上。

我能看到的一件事就是你的clean方法UserForm不是return self.cleaned_data

如果您暂时更改其中一个模板的名称并确保您获得了您认为自己的视图,则可能会使问题更容易排除故障。