Search code examples
djangodjango-registrationdjango-custom-user

Email forms do not match in Django Custom-User registration


I'm setting up a custom-user registration form to create an account on my Django project. I feel I'm missing something very simple that keeps me from registering for some reason. My registration form demands 4 fields to be filled before a new user can register. Of these 4 fields, two are just a confirmation of the email address.

Here is a copy of my form.py:

class UserRegisterForm(forms.ModelForm):
    username = forms.CharField(label='Username')
    email = forms.EmailField(label='Email Address')
    email2 = forms.EmailField(label='Confirm Email')
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'email2', 'password']

    def clean_email(self):
        email = self.cleaned_data.get('email')
        email2 = self.cleaned_data.get('email2')
        if email != email2:
            raise forms.ValidationError("Emails do not match")

And here is a copy of my view.py:

def register_view(request):
    next = request.GET.get('next')
    form = UserRegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get('password')
        user.set_password(password)
        user.save()
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        if next:
            return redirect(next)
        return redirect('/home/')
    context = {'form':form, "title":"register"}
    return render(request, "register.html", context)

Here is my html file:

<h2><center><font color="white">Register Here:</font></center></h2>
    <form method="POST"><center>
        {% csrf_token %}
        {{form}}
      <input type="submit" />
    </center></form>

Whenever I try to register as a new user, my form validation error is raised as is says that my two emails do not match (I copy-paste them to make sure they are identical).

I feel I'm missing something that is right under my nose...

Cheers to all of you and thank you very much.


Solution

  • try this

    def register_view(request):
        next = request.GET.get('next')
        form = UserRegisterForm(request.POST or None)
        if form.is_valid():
           email = form.cleaned_data.get('email')
           email1 = form.cleaned_data.get('email1')
            if email1 == email 
               user = form.save(commit=False)
               password = form.cleaned_data.get('password')
               user.set_password(password)
               user.save()
               new_user = authenticate(username=user.username, password=password)
               login(request, new_user)
                  if next:
                     return redirect(next)
              else:
                 ….