博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
modelform实例学习
阅读量:6085 次
发布时间:2019-06-20

本文共 3064 字,大约阅读时间需要 10 分钟。

先来回顾下form的用法

一对多关系,form显示的是下拉框

多对多关系,form显示的是多选框

modelform的用法

modelsform的写法

from django.forms import ModelFormfrom django.forms import widgetsfrom  rbac import modelsclass 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'}) }

视图的验证

52  53 # ============================================================ 54  55 # 类型首页 56 def user_type(request):  57     user_type_list = models.UserType.objects.all() 58     return render(request,'user_type.html',{
'user_type_list':user_type_list}) 59 60 61 # 添加编辑类型 62 class UserTypeModeForm(ModelForm): # 用户类型规则 63 title = fields.CharField(max_length=6,required=True,widget=wd.Textarea()) # 如果Meta里面没有这个字段,就是添加一个,如果有就是覆盖Meta里面相同字段样式 64 65 class Meta: 66 model = models.UserType # 用户类型表 67 fields = "__all__" # 所有字段 68 69 error_messages = { # 错误信息 70 'title':{
'required':'名称不能为空','invalid':'格式错误'} 71 } 72 widgets = { # 插件渲染,因为与导入widgets重名,所以导入的时候as设置了别名 73 'title':wd.TextInput(attrs={
'class':'c1'}) 74 } 75 76 # 钩子函数,同form 77 78 79 def user_type_add(request): # 用户类型添加,因为多对多关系,会渲染出来多选框,一对多渲染出下拉框,前端注意是form.字段没有id,因为你是从models引入来的,没有id 80 if request.method == "GET": 81 form = UserTypeModeForm() # get无数据渲染 82 return render(request,'user_type_add.html',{
'form':form}) 83 else: 84 form = UserTypeModeForm(request.POST) 85 if form.is_valid(): # 验证通过 86 form.save() # 保存到数据库 87 return redirect('/usertype/') 88 else: 89 return render(request, 'user_type_add.html', {
'form': form}) # 没通过验渲染错误 90 91 92 def user_type_edit(request,nid): # 编辑类型 93 obj = models.UserType.objects.filter(id=nid).first() 94 if not obj: 95 return HttpResponse('...') 96 97 if request.method == 'GET': 98 # 显示默认值 99 form = UserTypeModeForm(instance=obj) # 传递默认参数,页面就会显示默认的值100 return render(request,'user_type_edit.html',{
'form':form})101 else:102 form = UserTypeModeForm(instance=obj,data=request.POST) #### 更新的功能103 if form.is_valid():104 form.save()105 return redirect('/usertype/')106 else:107 return render(request, 'user_type_edit.html', {
'form': form})

前端页面

1  2  3  4     
5
6
7 Title 8 9 10
11 {% csrf_token %}12 {
{ form.as_p }} # 将他们渲染在p标签里,as_ul渲染li标签里,as_table渲染tr标签里13
14
15 16

 补充

可以针对字段,在前端页面显示field 是input 框field lable 是标题名字field error.0 错误信息

 

转载于:https://www.cnblogs.com/jokerbj/p/8189815.html

你可能感兴趣的文章
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.19. 范围函数和操作符...
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>
2018 年最值得关注的 JavaScript 趋势
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>
Linux中的帮助功能
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
Xcode 4.3 使用xcodebuild命令编译项目环境设置
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>