1. 区分 字段类型 和 Widget

字段作用:验证输入,直接在模板中使用
Widget:渲染HTML表单控件和原始数据,定义以哪种表单控件显示

每个字段都有默认的 Widget

2. 使用示例

2.1. 使用默认 Widgets

  1. first_name = forms.CharField(label='First Name', max_length=100)

2.2. 不使用默认 Widgets

  1. comment = forms.CharField(widget=forms.Textarea)

2.3. 设置 Widgets 参数

  1. # 日期字段类型 + 单选
  2. BIRTH_YEAR_CHOICES = ('1980', '1981', '1982')
  3. birth_year = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
  4. # 多选
  5. FAVORITE_COLORS_CHOICES = (
  6. ('blue', 'Blue'),
  7. ('green', 'Green'),
  8. ('black', 'Black'),
  9. )
  10. favorite_colors = forms.MultipleChoiceField(
  11. required=False,
  12. widget=forms.CheckboxSelectMultiple,
  13. choices=FAVORITE_COLORS_CHOICES,
  14. )

2.4. 添加 class,CSS样式

  1. name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))
  2. comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))

3. 控件类型

Widget 控件类型表

  • 文字输入
    • TextInput
    • NumberInput
    • EmailInput
    • URLInput
    • PasswordInput
    • HiddenInput
    • DateInput
    • DateTimeInput
    • TimeInput
    • Textarea
  • 选择框
    • CheckboxInput
    • Select
    • NullBooleanSelect
    • SelectMultiple
    • RadioSelect
    • CheckboxSelectMultiple
  • 文件上传
    • FileInput
    • ClearableFileInput
  • 其他
    • MultipleHiddenInput
    • SplitDateTimeWidget
    • SplitHiddenDateTimeWidget
    • SelectDateWidget