先来回顾下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实例学习的更多相关文章

  1. 【Django】--ModelForm组件

    ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...

  2. Python实例学习-文件备份

    1. 介绍 通过实例学习Python的使用,该实例来自文献[1]中的第11章解决问题. 由于没有搞清楚Win7下如何通过命令行调用zip命令,所以采用7z[2],采用7-zip命令行版本[3],版本号 ...

  3. Django Form and Modelform Admin定义 高级查询)

    Django的form表单一般具有两种功能 1. 验证输入 2.输入HTML ---------模板----------- from django import forms class BookFor ...

  4. Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...

  5. [转载] 跟着实例学习zookeeper 的用法

    原文: http://ifeve.com/zookeeper-curato-framework/ zookeeper 的原生客户端库过于底层, 用户为了使用 zookeeper需要编写大量的代码, 为 ...

  6. Django: ModelForm中Meta的fields等成员介绍

    class MyForm(forms.ModelForm): realname = forms.CharField() phone = forms.CharField() class Meta: mo ...

  7. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  8. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  9. .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧

    原文:.Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧. 话说有了WebB ...

随机推荐

  1. LeetCode第[1]题(Java):Two Sum (俩数和为目标数的下标)——EASY

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  2. 配置mybatis-config.xml出现过很诡异的现象

    1 首先得保证包的导入正确 2 然后如果把mybatis-config.xml放在src的某个文件夹下,最后能够build path 3 之后一直报 Archive for required libr ...

  3. dom兼容性问题3 元素操作

    /* var oLi = document.createElement('li'); oUl.appendChild( oLi ); }; createElement('') : 创建一个dom元素 ...

  4. python学习笔记(异常处理)

    上次提到正则表达式 当未匹配到数据返回值 None 再使用 match.group 会出现异常 AttributeError 为了避免异常我改成“ match != None” 这次加入异常处理 #! ...

  5. Java实现数组去除重复数据的方法详解

    一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...

  6. uboot主Makefile分析

    VERSION = 1 PATCHLEVEL = 3 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(S ...

  7. Report: Disappearing Wetlands Put Planet Life at Risk

    A new report warns that wetlands are disappearing three times faster than the world’s forests, with ...

  8. Flask 的 template模板 与 jinja2语法

    Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...

  9. 伪元素:placeholder-shown&&:focus-within

    :placeholder-shown 另外,划重点,这个伪类是仍处于实验室的方案.也就是未纳入标准,当然我们的目的是探寻有意思的 CSS . 当 input 类型标签使用了 placeholder 属 ...

  10. LINUX 修改本机yum源为163镜像源

    进入yum源配置目录 [root@localhost yum.repos.d]# cd /etc/yum.repos.d/ 备份系统yum源,用于日后恢复. [root@localhost yum.r ...