Python 显示django用户创建表单错误

Python 显示django用户创建表单错误,python,django,Python,Django,我使用的是django内置的用户创建表单,我对其进行了如下扩展 class RegistrationForm(UserCreationForm): email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'E-mail address'})) first_name = forms.CharField(required=True) last_name = for

我使用的是django内置的用户创建表单,我对其进行了如下扩展

class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'E-mail address'}))
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2')

    def clean_email(self):
        email = self.cleaned_data["email"]
        try:
            User._default_manager.get(email=email)
        except User.DoesNotExist:
            return email
        #raise forms.ValidationError(self.error_messages['duplicate_email'])
        raise forms.ValidationError('duplicate_email')

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        if commit:
            user.save()

    return user
如您所见,我添加了电子邮件验证,以检查是否已经有用户使用该电子邮件(我不接受)。 问题是这些错误都没有显示在我的模板中,我不知道为什么。我尝试了{{form.field.errors}},甚至尝试了{{form.errors.values.[I]}},但没有任何帮助 我在auth.forms中查看类UserCreationForm,我看到它将错误传递给错误消息,但我找不到显示它们的方法

虽然所有的验证(用户名检查、密码检查、电子邮件检查)都可以正常工作,但我仍然希望在带有错误的字段上方显示错误,以便用户理解他无法创建帐户的原因

更新

视图.py

def register_user(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():           
            form.save()

            return HttpResponseRedirect('/accounts/register_success')

    args = {}
    args.update(csrf(request))

    args['form'] = RegistrationForm()

    return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
我希望有人能帮我。 谢谢

这将起作用:

def register_user(request):
    args = {}
    args.update(csrf(request))
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        args['form'] = form
        if form.is_valid():           
            form.save()

            return HttpResponseRedirect('/accounts/register_success')
    else:
        args['form'] = RegistrationForm()   

    return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
代码的问题是,您一直在向模板传递未绑定的表单实例,因此您只是在覆盖任何发生的错误
请在此处查找参考资料:

这将起作用:

def register_user(request):
    args = {}
    args.update(csrf(request))
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        args['form'] = form
        if form.is_valid():           
            form.save()

            return HttpResponseRedirect('/accounts/register_success')
    else:
        args['form'] = RegistrationForm()   

    return render_to_response('user_profile/register.html', args, context_instance=RequestContext(request))
代码的问题是,您一直在向模板传递未绑定的表单实例,因此您只是在覆盖任何发生的错误

请在此处查找参考资料:

如果您正在寻找更高效的解决方案,那么您应该在views.py文件中尝试我下面的代码

您的forms.py代码将相同。但这是密码验证的泄漏

# to register auth user
class register_user(View):
    template1 = "app_name/register.html" # define templates
    template2 = "app_name/login.html"

    def get(self, request): # get method 
        form = RegistrationForm()
        return render(request, self.template1, locals())

    def post(self, request): # post method
        form = RegistrationForm(request.POST)     # create form object
        if form.is_valid():
            print "Form is validated"
            user_data = form.save(commit=False)
            user_data.save()
            return render(request, self.template2, locals())
        else:
            print "with error"
            return render(request, self.template1, locals())

我希望这会有所帮助。我仍在研究Django的良好实践。

如果您正在寻找更有效的解决方案,那么您应该在views.py文件中尝试我下面的代码

您的forms.py代码将相同。但这是密码验证的泄漏

# to register auth user
class register_user(View):
    template1 = "app_name/register.html" # define templates
    template2 = "app_name/login.html"

    def get(self, request): # get method 
        form = RegistrationForm()
        return render(request, self.template1, locals())

    def post(self, request): # post method
        form = RegistrationForm(request.POST)     # create form object
        if form.is_valid():
            print "Form is validated"
            user_data = form.save(commit=False)
            user_data.save()
            return render(request, self.template2, locals())
        else:
            print "with error"
            return render(request, self.template1, locals())

我希望这会有所帮助。我仍在研究Django的良好实践。

好吧,至少
电子邮件
如果你这样说,应该会显示错误:
{{form.email.errors}
。或者你真的像
{{form.field.errors}}
那样拼写它吗?当然。不,我写的是真实的字段名,我就是这么说的,举个例子。这也是我的想法,但不幸的是,即使是电子邮件错误也没有正确显示,我真的不知道为什么会考虑向我们显示您的查看功能。我刚刚用查看功能更新了我的问题。如果您这样说,至少
电子邮件
应该显示错误:
{{form.email.errors}
。或者你真的像
{{form.field.errors}}
那样拼写它吗?当然。不,我写的是真实的字段名,我就是这么说的,举个例子。这也是我的想法,但不幸的是,即使是电子邮件错误也不能正确显示,我真的不知道为什么会考虑向我们显示您的查看功能。我刚刚用查看功能更新了我的问题它可以工作!非常感谢,现在我明白这个问题了。我想投票支持这个答案,但不幸的是,我的声誉不足以支持这个答案,所以我只是将它标记为接受:)它有效!非常感谢,现在我明白这个问题了。我想对这个答案投赞成票,但不幸的是,我的声誉不够,所以我刚刚将其标记为接受:)