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

Атрибут cleaned_data

Атрибут cleaned_data класса Form содержит словарь с данными формы, прошедшими полную валидацию. Доступ к этому атрибуту возможен только после успешного выполнения метода is_valid, который запускает процесс очистки и проверки данных. В словаре ключами выступают имена полей формы, а значениями - данные, приведённые к нужному типу и прошедшие все валидаторы. Если форма не прошла валидацию, атрибут cleaned_data будет пустым словарем, либо вовсе недоступен для безопасного использования.

Синтаксис

<~show~> <+python+> form.cleaned_data.get('field_name') <-python-> <~show~>

Пример

Рассмотрим базовую форму с полями имени и возраста. После проверки is_valid, данные извлекаются из cleaned_data:

<~show~> <+python+> from django import forms class PersonForm(forms.Form): name = forms.CharField(max_length=100) age = forms.IntegerField(min_value=1, max_value=120) def handle_form(request): if request.method == 'POST': form = PersonForm(request.POST) if form.is_valid(): name = form.cleaned_data['name'] age = form.cleaned_data['age'] return HttpResponse(f"{name} is {age} years old.") else: form = PersonForm() return render(request, 'form.html', {'form': form}) <-python-> <~show~>

Пример

Использование метода get для безопасного доступа к данным позволяет избежать ошибки KeyError, если поле отсутствует или не прошло валидацию:

<~show~> <+python+> from django import forms class ContactForm(forms.Form): email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) def process_form(request): form = ContactForm(request.POST) if form.is_valid(): email = form.cleaned_data.get('email') message = form.cleaned_data.get('message', 'No message provided.') print(email, message) <-python-> <~show~>

Пример

Атрибут cleaned_data содержит данные с преобразованными типами. Например, поле с типом IntegerField будет хранить значение как целое число, а поле DateTimeField как объект datetime. Рассмотрим пример с формой регистрации:

<~show~> <+python+> from django import forms from datetime import datetime class RegisterForm(forms.Form): username = forms.CharField(max_length=30) age = forms.IntegerField() birth_date = forms.DateTimeField() form_data = { 'username': 'john_doe', 'age': '25', 'birth_date': '2025-01-01 10:30:00' } form = RegisterForm(form_data) if form.is_valid(): username = form.cleaned_data['username'] age = form.cleaned_data['age'] birth_date = form.cleaned_data['birth_date'] print(type(age)) print(type(birth_date)) <-python-> <~show~>

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

<~show~> <+python+> "" "" <-python-> <~show~>

Пример

Обработка ошибок при обращении к cleaned_data для формы, которая не прошла валидацию. В этом случае атрибут будет содержать пустой словарь:

<~show~> <+python+> from django import forms class LoginForm(forms.Form): email = forms.EmailField() password = forms.CharField(min_length=8) invalid_data = { 'email': 'not_an_email', 'password': 'short' } form = LoginForm(invalid_data) if not form.is_valid(): cleaned = form.cleaned_data print(cleaned) <-python-> <~show~>

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

<~show~> <+python+> "{}" <-python-> <~show~>

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

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