РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
387 of 818 menu

Атрибут 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,
    который позволяет добавить ошибку к полю или к форме
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить