modelform实例学习
先来回顾下form的用法
一对多关系,form显示的是下拉框
多对多关系,form显示的是多选框
modelform的用法
modelsform的写法
from django.forms import ModelForm
from django.forms import widgets from rbac import models class Userform(ModelForm):
class Meta:
model = models.User
fields = ['username','password'] error_messages = {
'username':{'required':'名称不能为空','invalid':'格式错误'},
'password':{'required':'名称不能为空','invalid':'格式错误'}
} widgets = {
'username':widgets.TextInput(attrs={'class':'form-control','placeholder':'username'}),
'password':widgets.TextInput(attrs={'class':'form-control','placeholder':'password'})
}
视图的验证
# ============================================================ # 类型首页
def user_type(request):
user_type_list = models.UserType.objects.all()
return render(request,'user_type.html',{'user_type_list':user_type_list}) # 添加编辑类型
class UserTypeModeForm(ModelForm): # 用户类型规则
title = fields.CharField(max_length=6,required=True,widget=wd.Textarea()) # 如果Meta里面没有这个字段,就是添加一个,如果有就是覆盖Meta里面相同字段样式 class Meta:
model = models.UserType # 用户类型表
fields = "__all__" # 所有字段 error_messages = { # 错误信息
'title':{'required':'名称不能为空','invalid':'格式错误'}
}
widgets = { # 插件渲染,因为与导入widgets重名,所以导入的时候as设置了别名
'title':wd.TextInput(attrs={'class':'c1'})
} # 钩子函数,同form def user_type_add(request): # 用户类型添加,因为多对多关系,会渲染出来多选框,一对多渲染出下拉框,前端注意是form.字段没有id,因为你是从models引入来的,没有id
if request.method == "GET":
form = UserTypeModeForm() # get无数据渲染
return render(request,'user_type_add.html',{'form':form})
else:
form = UserTypeModeForm(request.POST)
if form.is_valid(): # 验证通过
form.save() # 保存到数据库
return redirect('/usertype/')
else:
return render(request, 'user_type_add.html', {'form': form}) # 没通过验渲染错误 def user_type_edit(request,nid): # 编辑类型
obj = models.UserType.objects.filter(id=nid).first()
if not obj:
return HttpResponse('...') if request.method == 'GET':
# 显示默认值
form = UserTypeModeForm(instance=obj) # 传递默认参数,页面就会显示默认的值
return render(request,'user_type_edit.html',{'form':form})
else:
form = UserTypeModeForm(instance=obj,data=request.POST) #### 更新的功能
if form.is_valid():
form.save()
return redirect('/usertype/')
else:
return render(request, 'user_type_edit.html', {'form': form})
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form method="post" novalidate>
{% csrf_token %}
{{ form.as_p }} # 将他们渲染在p标签里,as_ul渲染li标签里,as_table渲染tr标签里
<input type="submit" value="提交">
</form>
</body>
</html>
补充
可以针对字段,在前端页面显示
field 是input 框
field lable 是标题名字
field error.0 错误信息
modelform实例学习的更多相关文章
- 【Django】--ModelForm组件
ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...
- Python实例学习-文件备份
1. 介绍 通过实例学习Python的使用,该实例来自文献[1]中的第11章解决问题. 由于没有搞清楚Win7下如何通过命令行调用zip命令,所以采用7z[2],采用7-zip命令行版本[3],版本号 ...
- Django Form and Modelform Admin定义 高级查询)
Django的form表单一般具有两种功能 1. 验证输入 2.输入HTML ---------模板----------- from django import forms class BookFor ...
- Django ModelForm and Form
django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...
- [转载] 跟着实例学习zookeeper 的用法
原文: http://ifeve.com/zookeeper-curato-framework/ zookeeper 的原生客户端库过于底层, 用户为了使用 zookeeper需要编写大量的代码, 为 ...
- Django: ModelForm中Meta的fields等成员介绍
class MyForm(forms.ModelForm): realname = forms.CharField() phone = forms.CharField() class Meta: mo ...
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧
原文:.Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧. 话说有了WebB ...
随机推荐
- XamlParseException异常
一般出现System.Windows.Markup.XamlParseException的错误是由1.dll库加载错误,查询一下你程序中引用的dll你是否加载并引用到程序内.2.程序中引用的文件(tx ...
- react 文章
1.http://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html (React 技术栈系列教程) 2.http://www.ru ...
- 【spark】RDD操作
RDD操作分为转换操作和行动操作. 对于RDD而言,每一次的转化操作都会产生不同的RDD,供一个操作使用. 我们每次转换得到的RDD是惰性求值的 也就是说,整个转换过程并不是会真正的去计算,而是只记录 ...
- css中zoom:1以及z-index的作用
一.CSS中zoom:1的作用在做IE6.IE7.IE8浏览器兼容的时候,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:1.触发IE浏览器的haslayout2.解决IE下的浮动,mar ...
- 【CSAPP】三、程序的机器级表示
本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位. 本章脉络:c\汇编\机器码之间的关系,数据的表示,控制结构如何实现.运行栈,局部变量的存储,数据结构. ...
- Qt中内存泄露和退出崩溃的问题
http://blog.csdn.net/wangkuiyun/article/details/7412379
- Http权威指南(报文)
1.报文的组成 报文由 起始行.首部.主体(可选)组成 请求报文: <method> <request-URL> <version> <headers> ...
- Kotlin For Gank.io (干货集中营Kotlin实现)
介绍 Kotlin,现在如火如荼,所以花了一点时间把之前的项目用Kotlin重构一下 原项目地址:https://github.com/onlyloveyd/GankIOClient 对应Kotlin ...
- HTTrack - 克隆任意网站
HTTrack可以克隆指定网站-把整个网站下载到本地. 可以用在离线浏览上,也可以用来收集信息(甚至有网站使用隐藏的密码文件). 一些仿真度极高的伪网站(为了骗取用户密码),也是使用类似工具做的. K ...
- RPi 3.5寸 电阻屏
/***************************************************************************** * RPi 3.5寸 电阻屏 * 说明: ...