In my register form I added a validation error when there is a duplicate username or email, but it is not working in my template.
forms.py :
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms
class RegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def clean_username(self):
username = self.cleaned_data.get("username")
if User.objects.filter(username=username).exists():
raise forms.ValidationError("Username is not unique")
return username
def clean_email(self):
email = self.cleaned_data.get("email")
if User.objects.filter(email=email).exists():
raise forms.ValidationError("Email is not unique")
return email
the template:
<body>
<div class="container">
<h1>Register</h1>
<form action="" method="post">
{% csrf_token %}
<label for="username">Username</label><br>
{{forms.username}} <br>
<label for="email">Email</label><br>
{{forms.email}} <br>
<label for="password1">Password</label><br>
{{forms.password1}} <br>
<label for="password2">Confirm Password</label><br>
{{forms.password2}} <br>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
{{ error|escape }}
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
{{ error|escape }}
{% endfor %}
{% endif %} <br><br>
<input type="submit" value="Register">
</form>
</div>
</body>
views.py:
from django.shortcuts import render
from .forms import RegisterForm
# Create your views here.
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
form.save()
else:
form = RegisterForm()
context = {'forms':form}
return render(request, 'register/register.html', context)
When I run the page and put a duplicate email then no validation error is raised, it just reloads the page removing the email or the username.