Форма 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"]Задание
ЛегкоПусть форма Django проверяет новое мероприятие.
- В
events/forms.pyнапишиEventForm:titleиplaceкак текст длиной до 100 символов,dateкак дату. - В
new_eventсоздай форму изrequest.POST. Если она действительна, создай мероприятие изform.cleaned_dataи перенаправь на него. Если нет, присвойerrorзначениеPlease check the form.
Отправь форму без даты: ты увидишь Please check the form.
Попробуйте сами
from django import forms
Все уроки раздела Формы
Потренируйтесь самостоятельно: Песочница Django