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

Метод full_clean

Метод full_clean применяется к экземпляру класса Form и запускает процесс полной проверки данных, переданных в форму. В ходе выполнения метода последовательно вызываются три этапа валидации: проверка каждого поля формы с использованием валидаторов и методов clean_<fieldname>, затем очистка всех данных через метод clean и, наконец, добавление ошибок, возникающих на каждом из этих этапов. Метод обычно вызывается неявно при обращении к атрибуту Form/method/is_valid/">is_valid или непосредственно для ручного запуска валидации, например, при работе с модельными формами и сохранением данных.

Метод full_clean не принимает никаких обязательных аргументов, но можно указать необязательный параметр exclude - список имен полей, которые следует исключить из проверки. Это полезно, когда нужно пропустить валидацию некоторых полей в определенных сценариях. Метод не возвращает значения, а все найденные ошибки валидации накапливаются в атрибуте Form/attribute/errors/">errors формы, который представляет собой объект ErrorDict.

Синтаксис

form.full_clean(exclude=None)

Пример

Рассмотрим базовую форму для регистрации пользователя. Вызовем метод full_clean вручную для проверки данных:

from django import forms class RegisterForm(forms.Form): username = forms.CharField(max_length=20) email = forms.EmailField() age = forms.IntegerField(min_value=18, max_value=99) # Данные с ошибкой в возрасте data = { 'username': 'john_doe', 'email': 'john@example.com', 'age': 15, } form = RegisterForm(data) form.full_clean() print(form.is_valid()) print(form.errors)

Результат выполнения кода:

"False" "{\"age\": [\"Ensure this value is greater than or equal to 18.\"]}"

Пример

Покажем использование параметра exclude, который позволяет исключить определенные поля из проверки. Например, при частичном обновлении профиля можно пропустить валидацию поля email:

from django import forms class ProfileForm(forms.Form): username = forms.CharField(max_length=30) email = forms.EmailField() age = forms.IntegerField(min_value=18, max_value=99) data = { 'username': 'jane_doe', 'email': 'not-an-email', 'age': 25, } form = ProfileForm(data) # Исключаем поле email из проверки form.full_clean(exclude=['email']) print(form.is_valid()) print(form.errors)

Результат выполнения кода:

"True" "{}"

Пример

Метод full_clean также используется при работе с модельными формами, где автоматически вызывается перед сохранением объекта. Однако его можно вызвать вручную, чтобы проверить данные без сохранения. Продемонстрируем на примере модели пользователя:

from django import forms from django.db import models class User(models.Model): username = models.CharField(max_length=20) email = models.EmailField() age = models.IntegerField() class UserForm(forms.ModelForm): class Meta: model = User fields = ['username', 'email', 'age'] def clean_age(self): age = self.cleaned_data.get('age') if age and age < 18: raise forms.ValidationError("Age must be at least 18") return age data = { 'username': 'peter', 'email': 'peter@example.com', 'age': 16, } form = UserForm(data) form.full_clean() print(form.is_valid()) print(form.errors)

Результат выполнения кода:

"False" "{\"age\": [\"Age must be at least 18\"]}"

Смотрите также

  • метод is_valid,
    который запускает валидацию формы и возвращает булево значение
  • метод clean,
    который выполняет проверку данных на уровне всей формы
  • атрибут errors,
    который содержит все ошибки валидации формы
  • метод add_error,
    который позволяет вручную добавить ошибку в форму
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить