一个 Django 表单
本课属于 Coddy Django 学习旅程的“表单”单元。第 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 在线编辑器