前言
1、在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的。而且一般情况下表单中需要验证的数据就是我们模型中需要保存的数据。那么这个时候我们就可以将模型中的字段和表单中的字段进行绑定
2、比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢?
⑴前端:首先会在前端一个一个罗列出这些字段,让用户去填写,然后后台一个一个接收用户的输入
⑵后台:定义一个学生模型,用来保存学生信息
⑶后台:定义一个学生表单,用来验证前端传递过来的数据
⑷后台:在视图函数中使用get()方法来一个一个的获取已通过验证的数据,然后使用模型中的QuerySet方法将数据保存起来
3、在上面示例中:其实表单的定义和模型的定义其实是差不多的,但是如果按照上面这种方式来的话,一个差不多的东西我们就需要完整的定义两边,这样就显得混麻烦了
4、因此Django就提供了ModelForm组件:这个组件主要就是用来整合表单和模型,将它们两个连接起来使用。就不需要完整的定义两次了
例1:
⑴编辑视图
⑵官方文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/
ModelForm组件
1、ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单、方便得对数据库进行增加、编辑操作和验证标签的生成
2、Django中Model负责操作数据库,并且具有简单的数据库验证功能(基本不用);Form用于用户请求的验证,具有强悍的数据库验证功能;ModelForm是将二者合二为一,即可用于数据库操作(部分),也可用于用户请求的验证(部分)。但由于ModelForm的耦合性太强,其作用一般用作于结构简单的小站点
3、Form组件和ModelForm的区别
⑴ModelForm是Django Model.py和Form组件的结合体,可以简单、快速使用 Form验证和数据库操作功能,但不如Form组件灵活
⑵如果在使用Django做web开发过程中验证的数据和数据库字段相关(可以对表进行增、删、改操),建议优先使用ModelForm,用起来更方便些
⑶但是在使用ModelForm的时候慎用fields='__all__',获取数据库所有字段势必造成性能损耗
4、适用场景:
⑴ModelForm:中小型应用程序。因为ModelForm是依赖于models的。
⑵Form:大型应用程序
ModelForm所有属性
class Meta:
model, # 对应Model的
fields=None, # 字段
exclude=None, # 排除字段
labels=None, # 提示信息
help_texts=None, # 帮助提示信息
widgets=None, # 自定义插件
error_messages=None, # 自定义错误信息
field_classes=None # 自定义字段类 (也可以自定义字段)
localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据
全验证
全验证的意思就是:模型中的字段全部需要在表单中进行验证,并且验证后的所有字段都需要进行数据库操作
例2:
⑴定义模型
⑵定义表单
⑶编辑视图
⑷访问:正确