• 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'})
            }

    视图的验证

     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 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     6     <meta name="viewport" content="width=device-width, initial-scale=1">
     7     <title>Title</title>
     8 </head>
     9 <body>
    10     <form method="post" novalidate>
    11         {% csrf_token %}
    12         {{ form.as_p }} # 将他们渲染在p标签里,as_ul渲染li标签里,as_table渲染tr标签里
    13         <input type="submit" value="提交">
    14     </form>
    15 </body>
    16 </html>

     补充

    可以针对字段,在前端页面显示
    field 是input 框
    field lable 是标题名字
    field error.0 错误信息
  • 相关阅读:
    文件或目录损坏且无法读取的解决办法
    MP3/视频播放
    系统备份
    网线水晶头接法
    网站模板
    EasyNVR将如何能够把内网各种各样的监控摄像机对接到公网云平台
    EasyNVR将如何能够把内网各种各样的监控摄像机对接到公网云平台
    EasyPusher手机直播推送是如何实现后台直播推送的
    EasyPusher手机直播推送是如何实现后台直播推送的
    EasyDarwin开源流媒体服务器支持basic基本认证和digest摘要认证解析
  • 原文地址:https://www.cnblogs.com/jokerbj/p/8189815.html
Copyright © 2020-2023  润新知