ModelForm操作
ModelForm
a. class Meta:
model, # 对应Model的
fields=None, # 字段
exclude=None, # 排除字段
labels=None, # 提示信息
help_texts=None, # 帮助提示信息
widgets=None, # 自定义插件
error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
field_classes=None # 自定义字段类 (也可以自定义字段)
localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据
如:
数据库中
2016-12-27 04:10:57
setting中的配置
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
则显示:
2016-12-27 12:10:57
b. 验证执行过程
is_valid -> full_clean -> 钩子 -> 整体错误 c. 字典字段验证
def clean_字段名(self):
# 可以抛出异常
# from django.core.exceptions import ValidationError
return "新值"
d. 用于验证
model_form_obj = XXOOModelForm()
model_form_obj.is_valid()
model_form_obj.errors.as_json()
model_form_obj.clean()
model_form_obj.cleaned_data
e. 用于创建
model_form_obj = XXOOModelForm(request.POST)
#### 页面显示,并提交 #####
# 默认保存多对多
obj = form.save(commit=True)
# 不做任何操作,内部定义 save_m2m(用于保存多对多)
obj = form.save(commit=False)
obj.save() # 保存单表信息
obj.save_m2m() # 保存关联多对多信息 f. 用于更新和初始化
obj = model.tb.objects.get(id=1)
model_form_obj = XXOOModelForm(request.POST,instance=obj)
... PS: 单纯初始化
model_form_obj = XXOOModelForm(initial={...})
使用modelform的增改查
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.shortcuts import render
from django import forms
from django.forms import fields
from app01 import models # Create your views here.
class UserInfoForm(forms.Form):
user = fields.CharField(max_length=32)
pwd = fields.CharField(max_length=32)
email = fields.EmailField(max_length=32)
usertype = fields.ChoiceField(
choices=models.UserType.objects.values_list('id', 'caption')
)
def __init__(self, *args, **kwargs):
super(UserInfoForm, self).__init__(*args, **kwargs)
self.fields['usertype'].choices = models.UserType.objects.all('id', 'caption') def index(request):
if request.method == 'GET':
obj= UserInfoForm()
return render(request,'index.html',{'obj':obj})
if request.method =='POST':
obj = UserInfoForm(request.POST)
obj.is_valid()
obj.errors
models.UserInfo.objects.create(**obj.cleaned_data)
#models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data)
return render(request,'index.html',{'obj':obj})
form组件的实现(存在数据外键无法写入问题,待排查)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.shortcuts import render
from django import forms
from django.forms import fields as Ffields
from django.forms import widgets as Fwidegets
from app01 import models # Create your views here.
class UserInfoModelForm(forms.ModelForm):
is_rem = Ffields.CharField(
widget=Fwidegets.CheckboxInput()
)
class Meta:
model = models.UserInfo
fields = '__all__'
#fields = ['username','pwd'] 选取
#exclude = ['username'] 排除
labels = {
'user':'用户名',
'pwd':'密码',
'email':'邮箱',
}
help_texts = {
'user':''
}
# widgets={
# 'user':Fwidegets.Textarea(attrs={'style':'background-color:blue'})
# }
error_messages={
'__all__':{ },
'user':{'required':'用户名不能为空'}
}
# field_classes={
# 'email':Ffields.URLField
# }
def clean_username(self):
old = self.cleaned_data['user']
print 'old is :',old
return old def index(request):
if request.method == 'GET':
obj= UserInfoModelForm()
return render(request,'index.html',{'obj':obj}) if request.method =='POST':
obj = UserInfoModelForm(request.POST)
if obj.is_valid():
obj.save()
# instance=obj.save(False) 等价于obj.save()
# instance.save()
# obj.save_m2m() # print obj.is_valid()
# print obj.cleaned_data
# print obj.errors # models.UserInfo.objects.create(**obj.cleaned_data)
#models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data)
return render(request,'index.html',{'obj':obj}) def user_list(request):
li = models.UserInfo.objects.all().select_related('usertype')
return render(request,'user_list.html',{'li':li}) 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})
if request.method=="POST":
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf=UserInfoModelForm(request.POST,instance=user_obj)
if mf.is_valid():
mf.save()
else:
print mf.errors
return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})
Views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.db import models # Create your models here. class UserType(models.Model):
caption=models.CharField(max_length=32) def __unicode__(self):
return self.caption class UserGroup(models.Model):
name=models.CharField(max_length=32) def __unicode__(self):
return self.name class UserInfo(models.Model):
user = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
email = models.EmailField(max_length=32)
usertype=models.ForeignKey(to='UserType',to_field='id')
u2g=models.ManyToManyField(UserGroup)
models.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/index/" method="POST">
{% csrf_token %}
{{ obj.as_p }}
<p><input type="submit" value="提交"> </p>
</form>
</body>
</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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for row in li %}
<li>{{ row.user }} - {{ row.usertype.caption}}--<a href="/edit-{{ row.id }}/">编辑</a></li>
{% endfor %}
</ul>
</body>
</html>
user_list.html
ModelForm操作的更多相关文章
- Django(九)上:ModelForm操作
一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...
- Django使用普通表单、Form、以及modelForm操作数据库方式总结
Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证 ...
- Django ModelForm操作及验证
一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...
- web框架-(七)Django补充---models进阶操作及modelform操作
通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...
- Python开发【Django】:ModelForm操作
ModelForm 内容回顾: Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form class LoginForm(Form): ...
- Django之ModelForm操作
一.ModelForm的使用 顾名思义,ModelForm就是将Model与Form进行绑定,Form有自动生成表单的作用,但是每一个forms字段需要自己手动填写,而Model就是数据库表包含了所有 ...
- Python学习---ModelForm拾遗180325
ModelForm适用于前台验证和后台直接操作数据库的前后台未做分离,可以一次执行验证和保存数据的场景. 注意: 1. ModelForm里面没有删除方法,需要手动删除内容 2. ModelFor ...
- Model&Form&ModelForm拾遗
Model&Form&ModelForm拾遗 一.Model&Form&ModelForm Model:用于用户请求数据的验证(针对性弱),但有强大的数据库操作 For ...
随机推荐
- 关于java实现断点续传的上传下载功能问题
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...
- Codeforces 912E Prime Gift ( 二分 && 折半枚举 && 双指针技巧)
题意 : 给你 N ( 1 ≤ N ≤ 16 ) 个质数,然后问你由这些质数作为因子的数 ( 此数不超 10^18 ) & ( 不一定需要其因子包含所给的所有质数 ) 的第 k 个是什么 分析 ...
- POJ 2289 多重二分匹配+二分 模板
题意:在通讯录中有N个人,每个人能可能属于多个group,现要将这些人分组m组,设各组中的最大人数为max,求出该最小的最大值 下面用的是朴素的查找,核心代码find_path复杂度是VE的,不过据说 ...
- [BZOJ3796]Mushroom追妹纸:后缀自动机+KMP
分析 这道题有个\(O(n)\)的后缀自动机做法,感觉很好理解就在这说一下. 先对\(s1\)和\(s2\)求最长公共子串,对于\(s2\)的每一个下标\(i\),求一个\(f[i]\)表示以\(s2 ...
- 3-Gitblit服务器搭建及IDEA整合Git使用
背景:虽然有GitHub.GitLab这样强大的Git仓库,但是涉及私有Git库要收费,所以自己动手搭建免费的用用 环境:windows 7 旗舰版.JDK 1.8.IDEA 2017 ------- ...
- 手动创建Maven项目并建立两个项目之间的依赖关系
用命令行快速建立maven项目 -> mvn:archetype:generate -> 直接回车或者自己输入你想生成的 -> groupId ->artifactId -&g ...
- Codeforces Aim Tech Round4 (Div2) D
题目链接: 题意: 给你一个严格升序的单链表,但是是用数组来存放的.对于每一个位置来说,你可以知道这个位置的值和下一个的位置.你每一个可以询问一个位置,机器会告诉你这个位置的值,和下一个位置的指针.要 ...
- CentOS7--删除virbr0
https://blog.csdn.net/aienjoy/article/details/78994128
- 算法中Amortised time的理解
ref:http://stackoverflow.com/questions/200384/constant-amortized-time 如果非要翻译成中文,我觉得摊算时间或均摊时间(注意,它和平均 ...
- webpack插件之htmlWebpackPlugin
webpack插件之htmlWebpackPlugin webpack插件 自动化 htmlWebpackPlugin 由于webpack已经帮我们处理好js之间的依赖关系,现在我们可以忽略js的加 ...