Menu
CoddyTech

一个 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"]
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 在线编辑器