(十一)Form 的绑定与 cleaned_data
浏览器提交文本,业务要使用布尔值、整数和合格字符串。先用普通 forms.Form 观察转换,暂时不保存模型。
# 项目文件:demos/simple_form.py
# 先比较未绑定表单与绑定表单,再查看验证后的 cleaned_data 和字段错误。
import django
from django import forms
from django.conf import settings
settings.configure(SECRET_KEY="temporary-demo-key", USE_I18N=False, INSTALLED_APPS=[])
django.setup()
class DraftForm(forms.Form):
title = forms.CharField(max_length=100)
finished = forms.BooleanField(required=False)
pages = forms.IntegerField(min_value=1)
for data in [
None,
{},
{"title": " Python Web ", "finished": "on", "pages": "3"},
{"title": "", "pages": "abc"},
]:
form = DraftForm(data)
print("绑定", form.is_bound, "通过", form.is_valid())
print(form.cleaned_data if form.is_valid() else list(form.errors))Form(None) 没有绑定数据,适合第一次显示空表单;Form({}) 已经绑定空提交,会对必填字段给出错误。is_valid() 执行转换与校验,通过后使用 cleaned_data,不再从原始 POST 中猜字段含义。
书名去空白、"3" 转为整数,勾选值转为 True;错误数据在 errors 中按字段保存。视图写 request.POST if request.method == "POST" else None,因此空 POST 也会被正确识别为一次需要检查的提交。