Django ModelForm在未提交的情况下进行了验证

时间:2010-08-20 04:48:52

标签: django django-forms

我的主页上有一张表格。我对此的看法如下:

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>

2 个答案:

答案 0 :(得分:0)

从您所描述的内容来看,似乎您使用无效的POST命中register视图。但是,当你转到页面时,你说main视图会发生这种情况吗?

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

我可以看到的一件事是,clean上的UserForm方法不会return self.cleaned_data

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

答案 1 :(得分:0)

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