先来回顾下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. BZOJ 4726 [POI2017]Sabota?:树形dp

    传送门 题意 某个公司有 $ n $ 个人,上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他下属(直接或者间接, 不包括他自己)中叛徒占的比例超过 $ x $ , ...

  2. php超级全局变量和魔术变量

    php超级全局变量和魔术变量 一.总结 一句话总结: 1.两者的书写形式非常不一样,超级全局变量是$_大写变量名 的形式,魔术变量是 __大写变量名的形式__ 2.两者的应用范围不一样,超级全局变量是 ...

  3. python学习笔记(conf配置文件)

    在优化自己的框架中发现一个问题 有很多参数在很多类中都要使用.是否有什么功能可以帮助优化这些功能 这里我就想到 conf配置文件.整理了下资料 总结下内容如下 #!/usr/bin/env pytho ...

  4. yii2:redis调用

    参照手册,调用redis,报错,真坑: Yii::$app->redis 后改改用: Yii::getRedis();

  5. Java基础16:Java多线程基础最全总结

    Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...

  6. spring boot配置德鲁伊

    1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下: <!-- Druid数据库连接池组件 --> <dependency& ...

  7. Annotation: 代码的修饰符

    Table of Contents 简介: 是什么, 用途, 为什么有用 使用: 一个简单例子,如@Override.系统提供的annotation,做成列表 定义新的annotation. 涉及到的 ...

  8. 005——VUE中的v-text与v-html的使用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. shell编程-变量

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: VALUE=“tmp” 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名的命名须遵 ...

  10. [置顶] Android 适配真要命?

    原始尺寸场景 相信大家对上面也有所有耳闻另外就是如何计算屏幕的密度一般都是按照勾股定理例如中等屏幕密度 480^2+800^2开根号 然后除以当前屏幕尺寸3.5-4.2之间尺寸. 对于刚出来的那些An ...