Menu
CoddyTech

Форма Django

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

Отправка формы без даты приводит к сбою сайта: Django не может преобразовать пустой текст в дату. Если проверять каждое поле вручную, придётся написать код для каждого поля и каждой ошибки.

Форма Django описывает поля один раз, в forms.py, и каждое поле знает, какие значения оно принимает. Форма бронирования ресторана:

from django import forms


class BookingForm(forms.Form):
    name = forms.CharField(max_length=50)
    day = forms.DateField()
    guests = forms.IntegerField()

Каждое поле обязательно, если не указать иное. Сначала CharField удаляет пробелы, поэтому имя, состоящее только из пробелов, считается пустым.

Во представлении создайте форму из полученных данных и вызовите is_valid(): этот метод проверяет каждое поле и возвращает True или False. Затем form.cleaned_data содержит значения, преобразованные в Python, поэтому cleaned_data["day"] — это datetime.date, а не текст:

form = BookingForm(request.POST)
if form.is_valid():
    day = form.cleaned_data["day"]
challenge icon

Задание

Легко

Пусть форма Django проверяет новое мероприятие.

  1. В events/forms.py напиши EventForm: title и place как текст длиной до 100 символов, date как дату.
  2. В new_event создай форму из request.POST. Если она действительна, создай мероприятие из form.cleaned_data и перенаправь на него. Если нет, присвой error значение Please check the form.

Отправь форму без даты: ты увидишь Please check the form.

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

from django import forms

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

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