Menu
CoddyTech

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

Часть раздела Формы путешествия по Django на Coddy. Урок 10 из 20.

Форма принимает мероприятие, датированное прошлым годом. Встроенные проверки Django учитывают типы и ограничения, но не правила вашего сайта. Собственное правило для одного поля помещается в метод с именем clean_ плюс имя поля. Форма регистрации, которая резервирует имя admin для персонала:

class SignupForm(forms.Form):
    username = forms.CharField(max_length=30)

    def clean_username(self):
        username = self.cleaned_data["username"]
        if username.lower() == "admin":
            raise forms.ValidationError("That name is reserved.")
        return username

is_valid() вызывает его после собственных проверок поля, поэтому значение уже преобразовано: DateField возвращает дату. Вызов forms.ValidationError отклоняет поле, и сообщение появляется рядом с ним.

Метод должен возвращать значение: то, что он возвращает, попадает в cleaned_data. Без return значение становится None.

challenge icon

Задание

Легко

В EventForm отклоняй дату, которая предшествует сегодняшнему дню, с сообщением The date cannot be in the past. Дата сегодняшнего дня подходит.

Добавь мероприятие с датой вчерашнего дня в формате 2026-10-30: ты увидишь The date cannot be in the past.

Попробуйте сами

from django import forms


class EventForm(forms.Form):
    title = forms.CharField(max_length=100)
    date = forms.DateField()
    place = forms.CharField(max_length=100)
    description = forms.CharField(widget=forms.Textarea, required=False)
    capacity = forms.IntegerField(min_value=1)

Все уроки раздела Формы

Потренируйтесь самостоятельно: Песочница Django