检查一个字段
本课属于 Coddy Django 学习旅程的“表单”单元。第 10 课,共 20 课。
这个表单接受日期为去年的活动。Django 内置的检查会检查类型和限制,但不了解你的网站规则。针对某个字段自定义的规则,应放在一个名为 clean_ 加上字段名称的方法中。下面是一个为工作人员保留 admin 这个名称的注册表单:
class SignupForm(forms.Form):
username = forms.CharField(max_length=30)
def clean_username(self):
username = self.cleaned_data["username"]
if username.lower() == "admin":
raise forms.ValidationError("That name is reserved.")
return usernameis_valid() 会在字段自身的检查之后调用它,因此值已经转换好了:DateField 会得到一个日期。抛出 forms.ValidationError 会拒绝该字段,错误消息会显示在字段旁边。
这个方法必须返回该值:它返回的值会存入 cleaned_data。如果没有 return,该值就会变成 None。
挑战
简单在 EventForm 中,如果日期早于今天,就拒绝提交,并显示消息 The date cannot be in the past. 日期是今天也可以。
添加一个日期为昨天的活动,日期格式像 2026-10-30:你会看到 The date cannot be in the past.
亲手试试
from django import forms
class EventForm(forms.Form):
title = forms.CharField(max_length=100)
date = forms.DateField()
place = forms.CharField(max_length=100)
description = forms.CharField(widget=forms.Textarea, required=False)
capacity = forms.IntegerField(min_value=1)
表单中的所有课
自己练习: Django 在线编辑器