Menu
CoddyTech

检查一个字段

本课属于 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 username

is_valid() 会在字段自身的检查之后调用它,因此值已经转换好了:DateField 会得到一个日期。抛出 forms.ValidationError 会拒绝该字段,错误消息会显示在字段旁边。

这个方法必须返回该值:它返回的值会存入 cleaned_data。如果没有 return,该值就会变成 None。

challenge icon

挑战

简单

在 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 在线编辑器