简介
Form、ModelForm都是django下forms下的类,
- django.forms.Form
- django.forms.ModelForm
Form能做到:
- 校验用户POST的数据是否满足数据库设计要求
- 不满足要求时,生成错误提示
- 于views.py定义form中多个字段,“自动”被html页面继承
ModelForm 还能做到:
- 基于models.py各字段(包含外键、包含元祖时),“自动”于views.py取到models的多个字段
例如gender_list限定男和女
depart_obj限定特定几个部门
ModelForm编写新增页面
views.py中
- 定义用户的ModelForm类
- ①“class Meta:”
- ②该用户类继承django.forms.ModelForm(可先引入django.forms)
- ③用户类中“model = 具体数据库表”
- ④用户类中“fields = 具体数据库表的具体字段” 或 = “all”
- 将用户类作为变量(“form”)传入request函数,最终传入html
html中
- 循环传入变量(“form”),取名“field”
- field.label 源自 models.py中该字段的verbose_name
- field在每次循环中,等同于具体的form.name、form.age、form.password……
- field有特定值时,例如“男”、“女”,html最终呈现为下拉框选项
- field有特定外键值时,例如“吹牛部”、“趟平部”,但html默认呈现为object
此时需要在models.py,对具体表做特别定义,使该表(作为对象)返回的值默认为具体某个字段
- 由于html中,{{ field }}不能额外定义css样式
那么如何实现应用Bootstrap的class?——在views.py中的用户类中做定义
- 逐个定义Bootstrap的样式
- 批量定义Bootstrap的样式
↑ 阅读django源码,才可发现这个方法:
用户类的super(),即django的ModelForm——的fiels.items()
包含name和field,其中可以在field.widget.attrs定义class
来源:BV1NL41157 武沛齐《2022 B站最详细django3教程(django从入门到实践)》P32-P33