ModelForm操作
1 ModelForm 2 a. class Meta: 3 model, # 对应Model的 4 fields=None, # 字段 5 exclude=None, # 排除字段 6 labels=None, # 提示信息 7 help_texts=None, # 帮助提示信息 8 widgets=None, # 自定义插件 9 error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS) 10 field_classes=None # 自定义字段类 (也可以自定义字段) 11 localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据 12 如: 13 数据库中 14 2016-12-27 04:10:57 15 setting中的配置 16 TIME_ZONE = 'Asia/Shanghai' 17 USE_TZ = True 18 则显示: 19 2016-12-27 12:10:57 20 b. 验证执行过程 21 is_valid -> full_clean -> 钩子 -> 整体错误 22 23 c. 字典字段验证 24 def clean_字段名(self): 25 # 可以抛出异常 26 # from django.core.exceptions import ValidationError 27 return "新值" 28 d. 用于验证 29 model_form_obj = XXOOModelForm() 30 model_form_obj.is_valid() 31 model_form_obj.errors.as_json() 32 model_form_obj.clean() 33 model_form_obj.cleaned_data 34 e. 用于创建 35 model_form_obj = XXOOModelForm(request.POST) 36 #### 页面显示,并提交 ##### 37 # 默认保存多对多 38 obj = form.save(commit=True) 39 # 不做任何操作,内部定义 save_m2m(用于保存多对多) 40 obj = form.save(commit=False) 41 obj.save() # 保存单表信息 42 obj.save_m2m() # 保存关联多对多信息 43 44 f. 用于更新和初始化 45 obj = model.tb.objects.get(id=1) 46 model_form_obj = XXOOModelForm(request.POST,instance=obj) 47 ... 48 49 PS: 单纯初始化 50 model_form_obj = XXOOModelForm(initial={...})
View Code
使用modelform的增改查
1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.shortcuts import render 5 from django import forms 6 from django.forms import fields 7 from app01 import models 8 9 # Create your views here. 10 class UserInfoForm(forms.Form): 11 user = fields.CharField(max_length=32) 12 pwd = fields.CharField(max_length=32) 13 email = fields.EmailField(max_length=32) 14 usertype = fields.ChoiceField( 15 choices=models.UserType.objects.values_list('id', 'caption') 16 ) 17 def __init__(self, *args, **kwargs): 18 super(UserInfoForm, self).__init__(*args, **kwargs) 19 self.fields['usertype'].choices = models.UserType.objects.all('id', 'caption') 20 21 def index(request): 22 if request.method == 'GET': 23 obj= UserInfoForm() 24 return render(request,'index.html',{'obj':obj}) 25 if request.method =='POST': 26 obj = UserInfoForm(request.POST) 27 obj.is_valid() 28 obj.errors 29 models.UserInfo.objects.create(**obj.cleaned_data) 30 #models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data) 31 return render(request,'index.html',{'obj':obj})
form组件的实现(存在数据外键无法写入问题,待排查)
1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.shortcuts import render 5 from django import forms 6 from django.forms import fields as Ffields 7 from django.forms import widgets as Fwidegets 8 from app01 import models 9 10 # Create your views here. 11 class UserInfoModelForm(forms.ModelForm): 12 is_rem = Ffields.CharField( 13 widget=Fwidegets.CheckboxInput() 14 ) 15 class Meta: 16 model = models.UserInfo 17 fields = '__all__' 18 #fields = ['username','pwd'] 选取 19 #exclude = ['username'] 排除 20 labels = { 21 'user':'用户名', 22 'pwd':'密码', 23 'email':'邮箱', 24 } 25 help_texts = { 26 'user':'111111' 27 } 28 # widgets={29 # 'user':Fwidegets.Textarea(attrs={'style':'background-color:blue'}) 30 # } 31 error_messages={ 32 '__all__':{ 33 34 }, 35 'user':{'required':'用户名不能为空'} 36 } 37 # field_classes={38 # 'email':Ffields.URLField 39 # } 40 def clean_username(self): 41 old = self.cleaned_data['user'] 42 print 'old is :',old 43 return old 44 45 46 def index(request): 47 if request.method == 'GET': 48 obj= UserInfoModelForm() 49 return render(request,'index.html',{'obj':obj}) 50 51 if request.method =='POST': 52 obj = UserInfoModelForm(request.POST) 53 if obj.is_valid(): 54 obj.save() 55 # instance=obj.save(False) 等价于obj.save() 56 # instance.save() 57 # obj.save_m2m() 58 59 # print obj.is_valid() 60 # print obj.cleaned_data 61 # print obj.errors 62 63 # models.UserInfo.objects.create(**obj.cleaned_data) 64 #models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data) 65 return render(request,'index.html',{'obj':obj}) 66 67 def user_list(request): 68 li = models.UserInfo.objects.all().select_related('usertype') 69 return render(request,'user_list.html',{'li':li}) 70 71 def user_edit(request,nid): 72 #获取当前的id的信息 73 #显示用户已经存在信息 74 if request.method=="GET": 75 user_obj=models.UserInfo.objects.filter(id=nid).first() 76 mf=UserInfoModelForm(instance=user_obj) 77 return render(request, 'user_edit.html', {'mf':mf,'nid': nid}) 78 if request.method=="POST": 79 user_obj = models.UserInfo.objects.filter(id=nid).first() 80 mf=UserInfoModelForm(request.POST,instance=user_obj) 81 if mf.is_valid(): 82 mf.save() 83 else: 84 print mf.errors 85 return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})
Views.py
1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.db import models 5 6 # Create your models here. 7 8 class UserType(models.Model): 9 caption=models.CharField(max_length=32) 10 11 def __unicode__(self): 12 return self.caption 13 14 class UserGroup(models.Model): 15 name=models.CharField(max_length=32) 16 17 def __unicode__(self): 18 return self.name 19 20 class UserInfo(models.Model): 21 user = models.CharField(max_length=32) 22 pwd = models.CharField(max_length=32) 23 email = models.EmailField(max_length=32) 24 usertype=models.ForeignKey(to='UserType',to_field='id') 25 u2g=models.ManyToManyField(UserGroup)
models.py
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <form action="/index/" method="POST"> 9 {% csrf_token %} 10 {{ obj.as_p }} 11 <p><input type="submit" value="提交"> </p> 12 </form> 13 </body> 14 </html>
index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action="/edit-{{ nid }}/" method="POST">{% csrf_token %}{{ mf.as_p }}<p><input type="submit" value="提交"></p></form> </body> </html>
user_edit.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <ul> 9 {% for row in li %} 10 <li>{{ row.user }} - {{ row.usertype.caption}}--<a href="/edit-{{ row.id }}/">编辑</a></li> 11 {% endfor %} 12 </ul> 13 </body> 14 </html>
user_list.html
转载于:https://www.cnblogs.com/qiangayz/p/9011957.html
ModelForm操作相关推荐
- Django ModelForm操作及验证
一.内容回顾 Model- 数据库操作- 验证class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = fi ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用...
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts importr ...
- 老男孩老师的博客地址 - 转自devops1992
害怕他那天不让人看了,所以我就复制一份到我自己的博客里. http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs. ...
- 老男孩老师的博客地址
http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs.com/vamei/archive/2012/09/13/ ...
- 关于大型网站技术演进的思考
关于大型网站技术演进的思考(一)--存储的瓶颈(1) 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出 ...
- Pyhon Django 表单类ModelForm注册案例(可直接操作数据库)
- ORM操作models一对多、多对多关系
ORM操作 单表.一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models ...
- Django之ModelForm验证
一.简介 Django中Model负责操作数据库,并且具有简单的数据库验证功能(基本不用):Form用于用户请求的验证,具有强悍的数据库验证功能:ModelForm是将二者合二为一,即可用于数据库操作 ...
- Django 之ORM操作
1.什么是ORM? 全称关系对象映射Object Relational Mapping(简称ORM),是通过描述面向对象与数据库之间的对应的元数据,将对象持久化的更新到数据库中. 有了ORM,就不需要 ...
最新文章
- 题目1159:坠落的蚂蚁
- nagios+cacit 整合(rpm)
- 进程间的通信方式(一):共享内存
- JVM——虚拟机的简介【摘录】
- go语言接收html上传的文件,html5原生js拖拽上传(golang版)
- java poi之Excel的创建
- BugkuCTF-Reverse题特殊的Base64
- P1009 [NOIP1998 普及组] 阶乘之和-2022.02.01(python3实现)
- java浪漫代码_Elasticsearch,从一个浪漫的故事开始(原理篇)
- keepalived+lvs+nginx高可用
- python3 输出系统信息
- 【Python 3.7.9官方文档】之术语对照表
- Android color颜色-色号总结
- keil5选择ST-Link Debugger时候setting点击不了问题
- matlab的ezplot绘图函数
- escape的主要用途
- 人们为什么把电子计算机叫电脑,《计算机王国》.pdf
- 【mysql】phpstudy8打开MySQL命令行的方法
- 基于RT_Thread连接中国移动onenet平台的RGB三色灯项目
- mysql库文件修复_mysql数据库文件修复