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

Метод is_valid

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

Синтаксис

form.is_valid()

Пример

Давайте создадим форму для регистрации пользователя с валидацией имени и email:

from django import forms from django.core.validators import EmailValidator class RegistrationForm(forms.Form): username = forms.CharField(max_length=50) email = forms.EmailField(validators=[EmailValidator()]) age = forms.IntegerField(min_value=18, max_value=100) # Создаем экземпляр формы с данными form_data = { 'username': 'john_doe', 'email': 'john@example.com', 'age': 25 } form = RegistrationForm(data=form_data) if form.is_valid(): print("Form is valid") print(form.cleaned_data) else: print("Form has errors") print(form.errors)

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

"Form is valid" {'username': 'john_doe', 'email': 'john@example.com', 'age': 25}

Пример

Рассмотрим случай, когда данные формы не проходят валидацию:

from django import forms class RegistrationForm(forms.Form): username = forms.CharField(max_length=50) email = forms.EmailField() age = forms.IntegerField(min_value=18, max_value=100) # Данные с ошибками invalid_data = { 'username': 'j', # слишком короткое имя 'email': 'invalid-email', # неверный формат email 'age': 16 # возраст меньше минимального } form = RegistrationForm(data=invalid_data) if form.is_valid(): print("Form is valid") else: print("Form has errors") print("Errors:", form.errors)

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

"Form has errors" "Errors: {'username': ['Ensure this value has at least 50 characters (it has 1).'], 'email': ['Enter a valid email address.'], 'age': ['Ensure this value is greater than or equal to 18.']}"

Пример

Метод is_valid также работает с ModelForm, где валидация включает проверки на уровне модели:

from django import forms from myapp.models import User class UserForm(forms.ModelForm): class Meta: model = User fields = ['username', 'email', 'age'] # Создаем форму с данными для существующего пользователя user_data = { 'username': 'alex_smith', 'email': 'alex@example.com', 'age': 30 } form = UserForm(data=user_data) if form.is_valid(): user = form.save(commit=False) print("User data is valid") print("Username:", user.username) print("Email:", user.email) print("Age:", user.age) else: print("Validation failed") print(form.errors)

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

"User data is valid" "Username: alex_smith" "Email: alex@example.com" "Age: 30"

Пример

Валидация формы с использованием метода clean для кросс-полевой проверки:

from django import forms class PasswordForm(forms.Form): password = forms.CharField(widget=forms.PasswordInput) confirm_password = forms.CharField(widget=forms.PasswordInput) def clean(self): cleaned_data = super().clean() password = cleaned_data.get('password') confirm_password = cleaned_data.get('confirm_password') if password and confirm_password and password != confirm_password: raise forms.ValidationError("Passwords do not match") return cleaned_data # Данные с несовпадающими паролями form_data = { 'password': 'secure123', 'confirm_password': 'different456' } form = PasswordForm(data=form_data) if form.is_valid(): print("Passwords match") else: print("Validation failed") print(form.non_field_errors())

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

"Validation failed" "['Passwords do not match']"

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

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