Model + Form ----> 验证 + 数据库操作
class UserInfo(models.Model):
username = models.CharField(max_length=32,verbose_name='用户名')
email = models.EmailField(verbose_name='密码')
user_type = models.ForeignKey(to='User_type',to_field='id',verbose_name='类型') from django import forms
from django.forms import fileds as Ffields
from django.forms import widgets as Fwidgets *
class UserInfoModelForm(forms.ModelForm):
class Meta:
model = models.UserInfo
fields = '__all__' #生成所有的字段标签
#fields = ['username','email'] #生成列表字段的标签
#exclude = ['email'] #生成除了列表字段的标签
Meta中的参数
labels = {
'username':'xxx',
'email':'邮箱',
}
help_texts={ # 帮助提示信息
'username':'这里填写用户名',
}
widgets={ # 自定义插件,widgets为关键字不能改变,导包时要起别名
'usernmae':Fwidgets.Textarea(attrs={'k':'v'}),
}
error_messages={ # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
'__all__':{
...
}
'username':{
'required':'用户名不能为空',
'invalid':'用户名不合法'
}
}
field_classes={ # 自定义字段类 (也可以自定义字段)
'email':Ffields.URLField #使用form中的类,因为关键字重复,导包时也要起别名
}
localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据 UTC --> 东八区时间
如:
数据库中
2016-12-27 04:10:57
setting中的配置
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
则显示:
2016-12-27 12:10:57
钩子与(Form一样):
def clean_username(self):
old = self.cleaned_data['username']
return old
#每个字段验证成功之后,可以追加操作

ModelForm额外字段:

例子:一个月免登录,这个字段不用做验证
class UserInfoModelForm(forms.ModelForm):
  is_rmb = Ffields.CharField(widget=Fwidgets.CheckboxInput())
   class Meta: 
model = models.UserInfo
函数处理:
    def user_edit(request, nid):
# 获取当前id对象的用户信息
# 显示用户已经存在数据
if request.method == "GET":
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf = UserInfoModelForm(instance=user_obj)
return render(request,'user_edit.html',{'mf': mf, 'nid': nid})
elif request.method == 'POST':
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf = UserInfoModelForm(request.POST,instance=user_obj)
#更新操作需要添加instance参数,创建新数据不需要添加
if mf.is_valid():
# obj.save() 拆分save操作↓↓↓↓↓↓
instance = mf.save(False) #让save操作失效
instance.save() #保存当前类
mf.save_m2m() #保存多对多中间关联表
else:
print(mf.errors.as_json())
return render(request,'user_edit.html',{'mf': mf, 'nid': nid})
继承
  Form -> BaseForm
  UserInfoModelForm -> ModelForm -> BaseModelForm -> BaseForm
BaseForm 中定义了is_valid()、cleaned_data、errors方法
验证方法和Form一样

Django学习-23-ModelForm的更多相关文章

  1. django学习之- modelForm

    ModelForm(耦合很强) 可以实现 1:数据库操作 2:数据验证 使用地方:1:小型项目,2:自定制jdango admin 功能: 1:可以生成html标签:class Meta... 2:m ...

  2. django学习-23.admin管理后台的数据表数据的自定义展示

    目录结构 1.前言 2.自定义设置一张指定的数据表的列表展示内容 2.1.第一步:如果我们想让数据表[hello_person]里面的表字段值全部展示出来,需在应用[hello]里的[admin.py ...

  3. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

  4. Django框架 之 modelform组件

    Django框架 之 modelform组件 浏览目录 创建mldelform 添加记录 编辑记录 Django框架中的modelform组件 通过名字我们可以看出来,这个组件的功能就是把model和 ...

  5. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  6. Django 学习笔记1-- URLconf

    今天好像巴黎有点乱,希望明天太阳还会照常升起. 简介 Django 是一个由 Python 编写.开源并采用经典的 MVC 设计模式的 Web Full Stack 应用框架. 在 Django 中, ...

  7. 今天主要推荐一下django学习的网址!

    前言:每个月忙碌的头20天后,在上班时间投入到django理论学习的过程中,花了差不多3天时间简单的研究了一下django,着实废了我不少脑细胞. 采用虫师前辈的一张图和话: 如果你把这过程梳理清晰了 ...

  8. Django 学习笔记之四 QuerySet常用方法

    QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...

  9. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  10. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

随机推荐

  1. 一次saltstack环境变量的坑

    现场环境: salt-minion端: ip:10.0.3.149     环境:使用 nvm装的nodejs    受用nodejs自带的npm 安装pm2 sal-master端: IP:10.0 ...

  2. BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]

    以后再也不做$World Final$的题了................ 还我下午 bzoj上TLE一次后就不敢交了然后去uva交 Claris太神了代码完全看不懂 还有一个代码uva上竟然WA了 ...

  3. django-rest-framework快速入门

    前言:第一次接触django-rest-framework是在实习的时候.当时也不懂,看到视图用类方法写的感觉很牛逼的样子.因为官网是英文的,这对我的学习还是有一点的阻力的,所以当时也没怎么学.真是太 ...

  4. 统计细菌基因组ORF

    提取细菌基因组ORF思路: 1.通过FNA文件得到细菌基因组序列 2.分正负链和三个相位共6种情况统计ORF 3.写入文件 转载请保留出处! 统计细菌基因组ORF 贴上Python代码(版本:3.6) ...

  5. GitLab简单使用

    [权限] ①已经搭建了Gitlab服务器,并已开通  http://git.******.com 权限(每个公司的git地址不一致),登陆到git中去: ②已经开通了项目权限(有专人负责开通): 当开 ...

  6. sql的升阶

    前言:基本数据库操作根本无法满足实际的需要,需要引入更多的操作. 触发器-隐式的,主动的,更新数据表中的信息.带有inserted和deleted两个临时表,代表新操作和旧操作. 它是一种特殊的存储过 ...

  7. Linux 快速执行历史命令,用 !编号

    例如: history | grep mysql 使用 !914 可以快速执行上述命令:

  8. Linux终端下 dstat 监控工具

    dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品.dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了.dstat可 ...

  9. Dockerfile 中的 CMD 与 ENTRYPOINT

    CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令.单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在 ...

  10. 加入GIMPS项目,寻找梅森素数!

    截止到目前为止人类共找到了50个梅森素数,其中最后16个梅森素数都是通过GIMPS项目找到的. 为了激励人们寻找梅森素数和促进网格技术发展,总部设在美国旧金山的电子前沿基金会(EFF)于1999年3月 ...