Django表单验证,如何在字段上显示消息?

时间:2016-10-07 13:52:18

标签: django django-forms django-views

我正在构建一个注册表单,但我在验证方面遇到了一些麻烦。

我希望看到该字段显示错误消息,但我在浏览器上收到错误消息:

The User could not be created because the data didn't validate.

Request Method:     POST
Request URL:    http://127.0.0.1:8000/account/register/
Django Version:     1.9.8
Exception Type:     ValueError
Exception Value:    

The User could not be created because the data didn't validate.

Exception Location:     C:\Python34\lib\site-packages\django\forms\models.py in save, line 446

这是我的forms.py

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', required=False ,widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', required=False  ,widget=forms.PasswordInput)

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

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        #cd = self.cleaned_data
        if not password2:
            raise forms.ValidationError("Fill out the password2 .")
        if password1 != password2:
            raise forms.ValidationError("The two password fields didn't match.")
        return password2

这是我的观点寄存器

def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        if  user_form.is_valid:
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])
            new_user.save()
            return render(request, 'account/register_done.html', {'new_user': new_user})
        else:
            print (user_form.errors)
    else:
        user_form = UserRegistrationForm()
    return render(request, 'account/register.html', {'user_form': user_form})

我的htmls - register.html

{% extends "account/base.html" %}
{% block title %}Create an account{% endblock %}
{% block content %}
    <h1>Create an account</h1>
    <p>Please, sign up using the following form:</p>
    <form action="." method="post">
        {{ user_form.as_p }}
        {% csrf_token %}
        <p><input type="submit" value="Create my account"></p>
    </form>
{% endblock %}

register_done.html

{% extends "account/base.html" %}
{% block title %}Welcome{% endblock %}
{% block content %}
    <h1>Welcome {{ new_user.first_name }}!</h1>
    <p>Your account has been successfully created. Now you can <a href="{% url "login" %}">log in</a>.</p>
{% endblock %}

1 个答案:

答案 0 :(得分:2)

好像你没有调用is_valid方法,这可能会导致这个问题:

if  user_form.is_valid 

尝试将以上行更改为:

if user_form.is_valid()