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