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. vscode 代码缩进2格

    "editor.detectIndentation":false,

  2. Python黑科技 | Python中四种运行其他程序的方式

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  3. You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): shopadmin. Run 'python manage.py migrate' to apply them.

    数据库迁移时报错, You have 1 unapplied migration(s). Your project may not work properly until you apply the ...

  4. nginx报错 nginx: [alert] kill(25903, 1) failed (3: No such process)

    当nginx 中报错 时 nginx报错 nginx: [alert] kill(25903, 1) failed (3: No such process) 通过在nginx/sbin,目录下 运行命 ...

  5. Oracle数据库备份还原

    导出备份的命令: 开始->运行->cmd->exp username/password@tns_name file=d:\backup.dmp 导入备份的命令: 开始->运行- ...

  6. AndroidStudio设置SVN忽略文件

    方法一: 在SVN中进行设置: 在空白处右键单击,选择TortoiseSVN -> Settings ->General:在General界面找到Global ignore pattern ...

  7. Eigen中的矩阵及向量运算

    Eigen中的矩阵及向量运算 ,[+,+=,-,-=] ,[\*,\*=] ,[.transpose()] ,[.dot(),.cross(),.adjoint()] ,针对矩阵元素进行的操作[.su ...

  8. Mybaits查询返回值是List类型的

    查询返回值是list类型的 1 首先在接口中写方法 public interface EmployeeMapper { public List<Employee> getEmpsByLas ...

  9. web开发中会话跟踪的方法

    1. 什么是会话 会话是指一个终端用户(服务器)与交互系统(客户端)进行通讯的过程. 2. 什么是会话跟踪 对同一个用户对服务器的连续的请求和接受响应的监视.(将用户与同一用户发出的不同请求之间关联, ...

  10. multiple datasource config

    Hi Harshit S. project structure: multiple datasource config as follows: step 1: step 2:add a datasou ...