一、文本类字段
1. CharField
-
特点:基础文本输入,支持任意字符串
-
应用:用户名、标题、地址等短文本输入
-
核心参数:
forms.CharField( label="字段标签", max_length=100, # 最大长度 min_length=2, # 最小长度 required=True, # 是否必填 initial="默认值", # 初始值 widget=forms.TextInput(attrs={'class': 'input-style'}), # 控件样式 error_messages={'required': '必填字段'}, # 错误提示 )
-
示例:
title = forms.CharField( label="文章标题", max_length=200, widget=forms.TextInput(attrs={'placeholder': '请输入标题'}) )
2. EmailField
-
特点:自动验证邮箱格式
-
应用:用户注册、找回密码等邮箱输入场景
-
特殊参数:
error_messages={'invalid': '邮箱格式错误'}
-
示例:
email = forms.EmailField( label="工作邮箱", help_text="需包含@企业域名", validators=[validate_company_email] # 自定义验证器 )
二、数值类字段
3. IntegerField
-
特点:仅接受整数输入
-
应用:年龄、数量、评分等数值输入
-
核心参数:
min_value=18, # 最小值 max_value=100, # 最大值
-
示例:
age = forms.IntegerField( label="年龄", min_value=0, max_value=150, widget=forms.NumberInput(attrs={'step': '1'}) )
4. DecimalField
-
特点:高精度浮点数输入
-
应用:价格、金额等金融数据
-
特殊参数:
max_digits=7, # 总位数(含小数位) decimal_places=2, # 小数位数
-
示例:
price = forms.DecimalField( label="商品价格", max_digits=10, decimal_places=2, widget=forms.NumberInput(attrs={'step': '0.01'}) )
三、选择类字段
5. ChoiceField
-
特点:下拉单选
-
应用:性别、分类等有限选项选择
-
核心参数:
choices=[('M','男'), ('F','女')], # 选项列表 widget=forms.Select(attrs={'class': 'select-box'})
-
示例:
GENDER_CHOICES = [('M','男'), ('F','女'), ('O','其他')] gender = forms.ChoiceField( label="性别", choices=GENDER_CHOICES, initial='M' )
6. MultipleChoiceField
-
特点:多选(复选框组)
-
应用:兴趣标签、多选分类
-
特殊参数:
widget=forms.CheckboxSelectMultiple # 多选控件
-
示例:
INTEREST_CHOICES = [ ('sports','体育'), ('tech','科技'), ('music','音乐') ] interests = forms.MultipleChoiceField( widget=forms.CheckboxSelectMultiple, choices=INTEREST_CHOICES )
四、日期时间类字段
7. DateField
-
特点:日期输入(返回
datetime.date
对象) -
应用:生日、预约日期
-
核心参数:
widget=forms.DateInput(attrs={'type': 'date'}) # HTML5日期控件 input_formats=['%Y-%m-%d', '%m/%d/%Y'] # 日期格式
-
示例:
birth_date = forms.DateField( label="出生日期", widget=forms.DateInput(attrs={'type': 'date'}), input_formats=['%Y-%m-%d'] )
8. DateTimeField
-
特点:日期+时间输入(返回
datetime.datetime
对象) -
应用:会议时间、任务截止时间
-
示例**:
meeting_time = forms.DateTimeField( label="会议时间", widget=forms.DateTimeInput(attrs={'type': 'datetime-local'}), help_text="请选择未来时间" )
五、文件类字段
9. FileField
-
特点:文件上传
-
应用:文档、图片、视频上传
-
核心参数:
max_upload_size=1024 * 1024 * 5, # 限制5MB validators=[ FileExtensionValidator(allowed_extensions=['jpg','pdf']), validate_file_size # 自定义大小验证 ]
-
示例:
document = forms.FileField( label="上传文档", validators=[ FileExtensionValidator(['pdf', 'docx']), MaxSizeValidator(5 * 1024 * 1024) ] )
10. ImageField
-
特点:图片上传(需
Pillow
库支持) -
应用:头像、产品图上传
-
示例:
avatar = forms.ImageField( label="用户头像", widget=forms.FileInput(attrs={'accept': 'image/*'}), validators=[validate_image_dimensions] # 验证图片尺寸 )
六、其他实用字段
11. BooleanField
-
特点:复选框(布尔值)
-
应用:同意协议、开关选项
-
示例:
agree_terms = forms.BooleanField( label="同意用户协议", required=True, initial=False )
12. ModelChoiceField
-
特点:关联模型的下拉选择
-
应用:外键关联选择
-
核心参数:
queryset=Category.objects.all(), empty_label="请选择分类", to_field_name="slug" # 使用slug作为值
-
示例:
category = forms.ModelChoiceField( queryset=Category.objects.filter(is_active=True), label="商品分类", widget=forms.Select(attrs={'class': 'select2'}) )
七、字段使用注意事项
-
文件上传处理:
<!-- 模板必须设置enctype --> <form method="post" enctype="multipart/form-data">
# 视图中需传入request.FILES form = MyForm(request.POST, request.FILES)
-
自定义错误消息:
age = forms.IntegerField( error_messages={ 'required': '年龄必须填写', 'min_value': '年龄不能小于18岁' } )
-
动态选项:
# 在表单初始化时动态设置选项 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['city'].choices = City.objects.values_list('id','name')
通过合理组合这些内建字段,可覆盖90%的表单开发需求。建议结合业务场景选择最优字段类型,并通过官方文档查阅完整参数列表。