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操作的更多相关文章

  1. Django(九)上:ModelForm操作

    一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...

  2. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用

    一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...

  3. Django使用普通表单、Form、以及modelForm操作数据库方式总结

    Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证 ...

  4. Django ModelForm操作及验证

    一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...

  5. web框架-(七)Django补充---models进阶操作及modelform操作

    通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...

  6. Python开发【Django】:ModelForm操作

    ModelForm 内容回顾: Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form class LoginForm(Form): ...

  7. Django之ModelForm操作

    一.ModelForm的使用 顾名思义,ModelForm就是将Model与Form进行绑定,Form有自动生成表单的作用,但是每一个forms字段需要自己手动填写,而Model就是数据库表包含了所有 ...

  8. Python学习---ModelForm拾遗180325

    ModelForm适用于前台验证和后台直接操作数据库的前后台未做分离,可以一次执行验证和保存数据的场景. 注意:  1.  ModelForm里面没有删除方法,需要手动删除内容 2. ModelFor ...

  9. Model&Form&ModelForm拾遗

    Model&Form&ModelForm拾遗 一.Model&Form&ModelForm Model:用于用户请求数据的验证(针对性弱),但有强大的数据库操作 For ...

随机推荐

  1. HDU 6656 Kejin Player

    hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地 ...

  2. 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)

    打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空.参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explo ...

  3. android遮罩阴影对话框的实现

    定义 <style name="MyDialog" parent="@android:Theme.Dialog"> <item name=&q ...

  4. 四十二、python中异常

    1.常用异常: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常:基本上是无法打开文件ImportError 无法引入模块或 ...

  5. preventDefault 和 stopPropagation

    概述 以前开发项目的时候,总是分不清楚 preventDefault 和 stopPropagation,每次都是用 @click.stop试一下,不能就用@click.prevent试一下.今天来好 ...

  6. java网络通信:netty

    Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保 ...

  7. ArchLinux下XFCE的一个问题修复:thunar加载的环境变量不正确

    家里的电脑上,安装了Arch32与Arch64.不记得以前做过什么操作, 导致在Arch32下,Thunar启动后,其环境变量缺失很多内容. 主要在PATH及LD_LIBRARY_PATH几个关键变量 ...

  8. IP子网的划分

    一.划分子网的具体步骤 已知192.168.1.0/24,划分8个子网(一个ip划分8个子网,即网络位不再是24位)1100 0000.1010 1000.0000 0001.0000 00001 . ...

  9. 最小二乘法公式推导及Python实现

    机器学习使用线性回归方法建模时,求损失函数最优解需要用到最小二乘法.相信很多朋友跟我一样,想先知道公式是什么,然后再研究它是怎么来的.所以不多说,先上公式. 对于线性回归方程\(f(x) = ax + ...

  10. Powershell 脚本输出前十条消耗内存的进程到excel

    # create new excel instance $objExcel = New-Object -comobject Excel.Application $objExcel.Visible = ...