forms.ModelForm 与 forms.Form
1. 首先 两者都是forms里的常用类。
2. 这两个类在应用上是有区别的。一般情况下,如果要将表单中的数据写入数据库或者修改某些记录的值,就要让表单类继承ModelForm; 如果提交表单后 不会对数据库就行修改,则继承Form类。
两则的区别可能是,继承了ModelForm,在数据保存的时候 可以这样保存。不需要models.XXX.objects.create(),
register_form = RegistrationForm(request.POST)
if register_form.is_valid():
# 带有前台传的数据的RegistrationForm对象,用new_user.save()直接可以保存,参数意思是不提交数据库,需要后面在提交
new_user = register_form.save(commit=False)
new_user.set_password(register_form.cleaned_data['password'])
new_user.save()
3. 在实际运用中,出现了一些问题,记录下来,以便日后查看。
问题一:对继承ModelForm 类的表单初始化值时,报错...
初始状态:
# 表单类
class UserInfoForm(forms.ModelForm):
company = fields.CharField()
school = fields.CharField()
phone = fields.CharField()
address = fields.CharField()
desc = fields.CharField(
widget=widgets.Textarea,
)
user_info = UserInfo.objects.get(user=request.user)
user_info_form = UserInfoForm(initial={
'school': user_info.school,
'company': user_info.company,
'phone': user_info.phone,
'address': user_info.address,
'desc': user_info.desc
})
# 在初始化值的时候 出现了错误....
File "E:\django学习\boke\account\views.py", line 90, in personal_data
'desc': user_info.desc
File "C:\Python35\lib\site-packages\django\forms\models.py", line 295, in __init__
raise ValueError('ModelForm has no model class specified.')
ValueError: ModelForm has no model class specified.
[08/Apr/2018 19:38:24] "GET /account/personal_data/ HTTP/1.1" 500 79115
解决办法:
class UserInfoForm(forms.ModelForm):
company = fields.CharField()
school = fields.CharField()
phone = fields.CharField()
address = fields.CharField()
desc = fields.CharField(
widget=widgets.Textarea,
)
class Meta:
model = UserInfo
fields = ('company', 'school', 'phone', 'address', 'desc')
# 表单类中需要加model=UserInfo 指向那个models类,及类中的那些字段。
问题二: 如果fields = ('password', 'email',) 用了两个字段,但在前台展示时,只用到一个如email,那么前台提交时,能否提交??
答案:不可以,前台需要用几个字段,这里就写几个 如 fields = ( 'email',), 多用到的字段,即使前台不用,提交时,form.is_valid() 也会验证。
试想,对于 forms.Form 如果表单类 有4个字段 且必填, 如果前台值用到四个,那么想必 form.is_valid() 同样不会通过。待验证...
4. 对form表单初始化值
if request.method == 'GET':
obj = models.ArticlePost.objects.get(id=nid)
print(obj.column.column)
form_article_obj = ArticlePostForm(initial={'title': obj.title, 'body': obj.body}) # 初始化input
form_column_obj = EditArticleColumnForm(initial={'column': obj.column.id}) # 初始化下拉菜单,用id
columns = models.ArticleColumn.objects.all()
return render(request, 'article/article_list_edit.html',
{'article_form': form_article_obj,
'nid': nid,
'column_form': form_column_obj,
'columns': columns,
'have_column': obj.column
})
forms.ModelForm 与 forms.Form的更多相关文章
- Django-Form组件-forms.ModelForm
froms.ModelForm 具有models操作数据库字段的功能,还具有Form的功能.较Form组件而言,根据model自动生成Form. 使用注册的案例进行初步认识 # 使用ModelForm ...
- Django学习之八:forms组件【对form舒心了】
目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...
- django 表单系统 之 forms.ModelForm
继承forms.ModelForm类实现django的表单系统 有时,我们在前端定义的<form>表单和后端定义的model结构基本上是一样的,那么我们可以直接在后端定义model后,定义 ...
- Django之forms.ModelForm
通常在Django项目中,我们编写的大部分都是与Django 的模型紧密映射的表单. 举个例子,你也许会有个Book 模型,并且你还想创建一个form表单用来添加和编辑书籍信息到这个模型中. 在这种情 ...
- Django框架——forms.ModelForm使用
使用模型创建表单 django提供了这种简便的方式,使用方法如下: 1.在项目的一个app目录中,创建forms.py文件 2.导入模块: from django import forms from ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- Django 用ModelForm批量保存form表单(非常实用的方法) mfor_verity项目
1.先看一下 Model 非常多 from django.db import models from users.models import UserProfile # Create your mod ...
- Umbraco Forms 使Rendering Forms scripts 在不同的template中
具体请参考 https://our.umbraco.org/documentation/products/umbracoforms/developer/Rendering-Scripts/ 转载 ht ...
- django基础 -- 10.form , ModelForm ,modelformset
一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...
随机推荐
- 博世传感器调试笔记(三)加速度及地磁传感器BMC156
一. 器件简介:1. BMC 156是一款整合三轴地磁传感器与三轴(12bit)加速度传感器于一体的传感器,以BMC 150 电子罗盘模块为基础, 并与Bosch Sensortec 2x ...
- 2017 国庆湖南 Day1
卡特兰数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ] ...
- Asp.net 中,在服务端向客户端写脚本的常用方法
在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...
- 早该知道的7个JavaScript技巧
我写JavaScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...
- UCenter在JAVA项目中实现的单点登录应用实例
Comsenz(康盛)的UCenter当前在国内的单点登录领域占据绝对份额,其完整的产品线令UCenter成为了账号集成方面事实上的标准. 基于UCenter,可以将Comsenz旗下的Discuz! ...
- Python练习-装饰器版-为什么我的用户总被锁定
参考代码如下: 1.用户登录程序流程控制代码: # 编辑者:闫龙 if __name__ == '__main__': import UserLoginFuncation LoclCount=[]; ...
- MySQL分布式集群之MyCAT(三)rule的分析【转】
首先写在最前面,MyCAT1.4的alpha版本已经发布了,这里面修复了不少的bug,也完善了一细节,之前两篇博客已经做了一些修改 ---------------------------------- ...
- MySQL数据记录大小写敏感问题【转】
MySQL大小写敏感 字符串大小写敏感和Mysql的数据库的名字.表名字.字段名字.还有字段值有关. 1.和数据库名字.表名字.存储过程和触发器有关 为0时:表示区分大小写,使用CREATE TABL ...
- 四、Springboot Debug调试
描述: 在使用maven插件执行spring-boot:run进行启动的时候,如果设置的断点进不去,要进行以下的设置. 1.添加jvm参数配置 在spring-boot的maven插件加上jvmArg ...
- css-css背景
CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果 一:背景色background-color 属性 p {background-color: gray;} 二:背景图像 backgr ...