Django Academy · Урок

Пользовательская проверка с методами clean

Добавляйте правила проверки на уровне полей и формы

Урок 3 из 413 шагов

«Пользовательская проверка с методами clean» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.

За пределами встроенных правил

Поля модели выполняют базовые проверки, но реальным приложениям нужны собственные правила. Django запускает Ваши методы clean, чтобы обеспечить именно нужную логику. 🧹

Проверка отдельного поля

Чтобы проверить одно поле, добавьте метод с именем clean_fieldname. Django автоматически вызывает его при проверке этого поля.

def clean_title(self):
    title = self.cleaned_data["title"]
    return title

Чтение из cleaned_data

Внутри метода очистки получите значение из cleaned_data. К этому моменту Django уже преобразовал его в подходящий тип Python.

title = self.cleaned_data["title"]

Отклонение через исключение

Если значение нарушает Ваше правило, вызовите исключение ValidationError. Django перехватит его и покажет сообщение рядом с этим полем формы.

from django.core.exceptions import ValidationError
raise ValidationError("Title is too short.")

Настоящая проверка поля

Здесь мы отклоняем заголовки короче пяти символов. Обратите внимание: в конце необходимо вернуть значение, чтобы оно сохранилось в cleaned_data.

def clean_title(self):
    title = self.cleaned_data["title"]
    if len(title) < 5:
        raise ValidationError("Too short.")
    return title

Всегда возвращайте значение

Золотое правило clean_fieldname: верните очищенное значение. Если забыть это сделать, поле станет равным None, даже если введённые данные были корректными.

Проверка всей формы

Чтобы сравнить два поля, переопределите метод clean для всей формы. Он выполняется после завершения всех проверок на уровне отдельных полей.

def clean(self):
    cleaned = super().clean()
    return cleaned

Сначала вызовите super().clean()

Начните проверку формы с вызова super().clean(). В результате Вы получите полный словарь cleaned_data, собранный по результатам проверок полей.

cleaned = super().clean()
start = cleaned.get("start")
end = cleaned.get("end")

Сравнение двух полей

Теперь Вы можете задать правила для нескольких полей, например убедиться, что end идёт после start. Если это соотношение нарушено, вызовите ValidationError.

if start and end and end < start:
    raise ValidationError("End must be after start.")

Привязка ошибок к полю

При проверке всей формы можно указать конкретное поле с помощью add_error. Тогда сообщение появится прямо рядом с этим полем ввода, а не вверху формы.

self.add_error("end", "End must be after start.")

Порядок проверки

Django сначала выполняет каждый clean_fieldname, а затем в последнюю очередь — проверку всей формы. Знание этого порядка помогает правильно размещать правила.

Быстрая проверка

Где должно находиться правило, сравнивающее два поля?

Итоги: настраиваемая проверка

Отлично! Используйте clean_fieldname для отдельных полей, а проверку всей формы — для правил, связанных с несколькими полями. Вызывайте ValidationError для отклонения данных и всегда возвращайте очищенные значения. 🎉

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Пользовательская проверка с методами clean» бесплатный?

Да — полный текст урока «Пользовательская проверка с методами clean» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.

Чему я научусь в уроке «Пользовательская проверка с методами clean»?

Добавляйте правила проверки на уровне полей и формы Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Django Academy?

Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Пользовательская проверка с методами clean»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Django Academy?

Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объявление ModelForm и Meta.fields
  2. form.save() и commit=False
  3. Пользовательская проверка с методами clean
  4. Виджеты, подписи и справочный текст
← Назад к Django Academy