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 сначала удаляет пробелы, поэтому имя, состоящее только из пробелов, считается пустым.

Во view создайте форму из полученных данных и вызовите 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

Задание

Легко
  • В events/forms.py напишите EventForm: title и place должны быть текстом длиной не более 100 символов, а date — датой.
  • В new_event проверьте отправленные данные POST. Если данные корректны, создайте событие из преобразованных значений и выполните перенаправление. Если нет, отобразите страницу, установив для error значение Please check the form.

Нажмите Run и отправьте форму без даты.

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

from django import forms

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

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