龙空技术网

Django中ModelForm简易使用教程

会测试的鲸鱼 107

前言:

今天姐妹们对“django modelform”大约比较珍视,我们都需要分析一些“django modelform”的相关资讯。那么小编在网上网罗了一些有关“django modelform””的相关内容,希望朋友们能喜欢,朋友们一起来学习一下吧!

对于Django不太熟且开发经验不太多的同学,写前后端传参的时候,可能会把所有参数都写一遍,或者进行遍历。但是这样写会有以下几个问题点:

用户提交数据需要单独写校验;错误信息要单独写前端代码进行展示;页面上每一个字段都需要写代码;关联数据,需要手动获取并遍历展示。

而且实际工作中,即使想手动完成上面这些点,也很容易遗漏导致bug出现。

而Django为了帮忙开发者处理以上问题,更快捷的完成开发工作,提供了一个组件:ModelForm

ModelForm简介

从字面意思就可以看出来,这个组件的功能就是把model和form组合起来。初看这是句废话,熟练使用后就会有种就是这样的明悟。

ModelForm使用演示

准备Model类,这里准备了这样两个:

Model类

其中Department重写了__str__方法,是为了在前端能直接显示部门名称,默认的__str__方法返回的是对象的内存地址。

引入ModelForm,将这个ModelForm和Model关联起来:

使用ModelForm

可以看到在ModelForm中引入了Model,参数fields是用来定义这个ModelForm中具体的字段的,可以直接从Model中取,也可以自己重新定义,比如这里就重新定义了name的字段长度必须不小于3个字符。

还重写了一遍__init__方法,这是为了让前端显示时有一个风格,默认是全部堆积在一起的,不太美观。

在需要使用这个ModelForm的时候,可以这样:

实例化ModelForm

在模板文件中可以这样使用:

循环取参数

其中参数field.label就是Model中定义字段时设置的verbose_name。

最终显示到前端的效果:

前端展示效果

后端接收提交的逻辑就比较简单了,不再需要单个取字段往Model中存,只需要这样:

接收表单数据进行处理

is_valid方法是校验数据是否有效,校验的标准是数据库是否支持和自己定义的字段规则。如果数据有效,就可以直接调用save方法,不用写代码用Model存数据库,当然save其实底层也是一样在调用ORM。保存成功后就跳转到列表页面。

如果上传的数据有问题,就将这个数据返回给前端,让前端展示错误信息。前面的模板文件中可以看到有一个field.errors.0,其实是可能存在多个error同时存在的,但是没必要一次性全部展示,所以这里只展示第一条error。

前端报错效果:

提交数据报错

Django默认是使用英文的,提示语是跟随Django的设置的,要改变语言的话可以到settings.py中调整:

调整语言环境

其中zh-hans表示中文。

总结

如果学过Java后端开发,对于这里提的ModelForm应该会有似曾相识的感觉。虽然现在都是前后端分离,前后端基本都是在使用json交互,但是Django的ModelForm还是值得一看的,在一些小项目中非常值得一用。

标签: #django modelform #django modelform如何生成xecel