简体   繁体   中英

Django form validation, how to show messages on the fields?

I am building a register form, but I am having some trouble with its validation.

I would like to see the error message showing up at the field, but instead I am getting a error on the browser saying :

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

This is my 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

This is my view register

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})

my 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 %}

Seems like you are not calling is_valid method, this may cause this issue:

if  user_form.is_valid 

Try to change above line to:

if user_form.is_valid()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM