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 ...
随机推荐
- 利用word宏功能一键导出数据库表结构
前言: 需求是: 为了完成<数据库设计文档>中的表结构展示,需要导出所有的表结构,包括字段名.长度.注释等必要标题. 数据库:MySQL 我选择的方法是——用word的宏功能导出.很多博客 ...
- [THUSC2017]杜老师:bitset+线性基
算法一(50pts) 分析 有一个很显然的暴力做法,对于区间内的每个数开个bitset,然后暴力分解质因数.如果对于一个数,它的一个质因子的指数是奇数,那么就把bitset的对应位设成\(1\).答案 ...
- sqli-lab(14)
POST型的 双注入 0X01随便测试一下 在password输入"会报错 "#就不报错了 那么应该是“”的闭合 但是没有回显的值 只有报错的信息 那我们是不是该考虑从报错的语句 ...
- phpstorm的下载激活及定制使用和设置
1.下载地址: 链接:https://pan.baidu.com/s/19PbZnzq0x7grgBge-iHI3w&shfl=sharepset 提取码:dnte 2.激活码获取:http ...
- springcloud(十七):服务网关 Spring Cloud GateWay 熔断、限流、重试
上篇文章介绍了 Gataway 和注册中心的使用,以及 Gataway 中 Filter 的基本使用,这篇文章我们将继续介绍 Filter 的一些常用功能. 修改请求路径的过滤器 StripPrefi ...
- C语言第四次实验报告
第四次实验报告 一·实验项目名称: 多球反弹 二·实验项目功能描述: (1)实现多个小球 (2)实现多个小球碰壁会反弹 (3)实现小球之间碰撞反弹 三· 项目模块结构介绍 #define High 4 ...
- 第一次试验报告&学习总结
打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数". 试验代码: p ...
- 基于DRF的图书增删改查练习
功能演示 信息展示 添加功能 编辑功能 删除功能 DRF构建后台数据 本例的Model如下 from django.db import models class Publish(models.Mode ...
- Python学习之==>常用模块
一.string模块 import string print(string.ascii_letters) # 所有大小写字母 print(string.ascii_lowercase) # 所有小写字 ...
- Jmeter之内存溢出解决办法
使用Jmeter进行压力测试会遇到一段时间后报内存溢出的错误,导致Jmeter卡死.这是因为Jmeter默认的HEAP配置的太小了,解决办法如下: 1.Windows环境 修改jmeter.bat ...