外观
字段类型
生成的Form类中将具有和指定模型对应的表单字段,顺序为fields属性列表中指定的顺序。每个模型字段都有一个默认的表单字段。如模型中的CharField字段可表现成表单中的CharField,模型中的ManyToManyField可表现成MultipleChoiceField字段。完整的映射关系如下表。
| 模型字段 | 表单字段 |
|---|---|
| AutoField | 在Form类中无法使用 |
| BlgAutoField | 在Form类中无法使用 |
| BigIntegerField | IntegerField,最小-9223372036854775808,最大9223372036854775807 |
| BooleanField | BooleanField |
| CharField | CharField |
| CommaSeparatedIntegerField | CharField |
| DateField | DateField |
| DateTimeField | DateTimeField |
| DecimalField | DecimalField |
| EmailField | EmailField |
| FileFIeld | FileFIeld |
| FilePathField | FilePathField |
| FloatField | FloatField |
| ForeignKey | ModelChoiceField |
| ImageField | ImageField |
| IntegerField | IntegerField |
| IPAddressField | IPAddressField |
| GenericIPAddressField | GenericIPAddressField |
| ManyToManyField | ModelMutipleChoiceField |
| NullBooleanField | NullBooleanField |
| PositiveIntegerField | IntegerField |
| PositiceSmallIntegerField | InregerField |
| SlugField | SlugField |
| SmallIntegerField | IntegerField |
| TexrField | CharField,带有widget=forms.Texrarea参数 |
| TimeField | TimeField |
| URLField | URLField |
可以看出,Django在设计model字段和表单字段时存在大量的相似之处。
- ForeignKey被映射为表单的django.forms.ModelChoiceField,它的选项是一个模型的QuerySet,也就是可以选择的对象列表,但是只能选择一个。
- ManyToManyField被映射为表单的django.forms.ModelMultipleChoiceField,它的选项是一个模型的QuerySet,也就是可以选择的对象列表,且可以选择多个。
同时,在表单属性设置上,还有如下的映射关系。
- 若模型字段设置blank=True,那么表单字段的required字段将被设为False。
- 表单字段的label属性根据字段的verbose_name属性设置,并将第一个字母大写。
- 若模型的某个字段设置了editable=False属性,那么表单类将不会出现该字段。表单字段额help_text设置为模型字段的help_text。
- 如果模型字段设置了choices参数,那么表单字段的widget属性将设为Select框,其选项来自于模型字段的choices。选单中通常有一个空选项,并且作为默认选择。若该字段为必选字段,则会强制用户选择第一个选项;若模型字段具有default参数,则不会添加空选项到选单中。