Атрибут errors
Атрибут errors применяется к экземпляру класса Form
и возвращает словарь, содержащий ошибки валидации, возникшие
в процессе проверки данных формы. Ключами словаря выступают
имена полей формы, а значениями - списки сообщений об ошибках
для этих полей. Если форма не была связана с данными
или валидация прошла успешно, словарь будет пустым.
Синтаксис
form.errors
Пример
Рассмотрим простую форму для регистрации пользователя:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(min_length=3, max_length=20)
email = forms.EmailField()
password = forms.CharField(min_length=8)
Валидация формы с неверными данными:
from myapp.forms import RegistrationForm
# Create form with invalid data
data = {
'username': 'us', # too short (min_length=3)
'email': 'invalid-email', # invalid format
'password': '1234567', # too short (min_length=8)
}
form = RegistrationForm(data)
if not form.is_valid():
errors = form.errors
for field, error_list in errors.items():
print(f"{field}: {', '.join(error_list)}")
Результат выполнения кода:
"username: Ensure this value has at least 3 characters (it has 2)."
"email: Enter a valid email address."
"password: Ensure this value has at least 8 characters (it has 7)."
Пример
Проверка наличия ошибок в конкретном поле:
from myapp.forms import RegistrationForm
data = {
'username': 'testuser',
'email': 'test@example.com',
'password': 'weak',
}
form = RegistrationForm(data)
if not form.is_valid():
# Check if specific field has errors
if 'password' in form.errors:
print("Password field has errors:")
for error in form.errors['password']:
print(f" - {error}")
Результат выполнения кода:
"Password field has errors:"
" - Ensure this value has at least 8 characters (it has 4)."
Пример
Работа с ошибками всей формы (non-field errors):
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
def clean(self):
cleaned_data = super().clean()
username = cleaned_data.get('username')
password = cleaned_data.get('password')
if username and password:
if username != 'admin' or password != 'secret123':
raise forms.ValidationError("Invalid username or password")
return cleaned_data
Проверка формы с неверными учетными данными:
from myapp.forms import LoginForm
data = {
'username': 'user',
'password': 'wrongpass',
}
form = LoginForm(data)
if not form.is_valid():
# Access non-field errors
if form.non_field_errors():
print("Form errors:")
for error in form.non_field_errors():
print(f" - {error}")
# Alternatively, access all errors from form.errors
print("\nAll errors:")
for field, errors in form.errors.items():
print(f"{field}: {', '.join(errors)}")
Результат выполнения кода:
"Form errors:"
" - Invalid username or password"
"\nAll errors:"
"__all__: Invalid username or password"
Пример
Использование атрибута errors в шаблоне для отображения ошибок:
from django.shortcuts import render
from myapp.forms import RegistrationForm
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
# Process valid data
pass
else:
form = RegistrationForm()
return render(request, 'register.html', {'form': form})
Пример шаблона для отображения ошибок формы:
<form method="post">
{% csrf_token %}
{% if form.errors %}
<div class="error-container">
<ul>
{% for field, errors in form.errors.items %}
<li>{{ field }}: {{ errors|join:", " }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>
Смотрите также
-
метод
is_valid,
который выполняет валидацию формы и возвращает результат -
атрибут
cleaned_data,
который содержит валидированные данные формы -
метод
non_field_errors,
который возвращает ошибки, не связанные с конкретными полями -
метод
add_error,
который позволяет добавить ошибку к полю или к форме