Я хочу показать некоторые ошибки проверки для полей в форме:
- Если электронная почта уже существует
- Если имя пользователя меньше 8 символов
- Если пароли не совпадают
- Если поле пароля меньше 8 символов
forms.py
class RegisterForm(forms.Form):
username = forms.CharField(widget = forms.TextInput(attrs ={"class":"form-control mb-2 mr-sm-2" ,"placeholder":"username"}))
email = forms.EmailField(widget = forms.TextInput(attrs = {"class":"form-control mb-2 mr-sm-2"}))
password = forms.CharField(widget = forms.PasswordInput(attrs = {"class":"form-control mb-2 mr-sm-2"}))
password2 = forms.CharField(label = "Confirm Password",widget = forms.PasswordInput(attrs = {"class":"form-control mb-2 mr-sm-2"}))
def clean(self):
data = self.cleaned_data
password = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password2')
if password2!=password:
raise forms.ValidationError("Passwords dont match")
if len(password)<8:
raise forms.ValidationError("Password must be atleast 8 characters long")
return data
def clean_username(self):
username = self.cleaned_data.get('username')
qs = User.objects.filter(username = username)
if qs.exists():
raise forms.ValidationError("username exists")
return username
def clean_email(self):
email = self.cleaned_data.get('email')
qs = User.objects.filter(email = email)
if qs.exists():
raise forms.ValidationError("email exists",code="error1")
return email'''
register.html
<form method="POST" class="was-validated">
{% csrf_token %}
<div class="form-group">
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{%endif%}
{{form.as_p}}
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>'''
Я хочу, чтобы ошибка проверки отображалась только один раз.Я не хочу ошибки над каждым полем.Я просто хочу, чтобы все ошибки были наверху.