博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django-ModelForm
阅读量:4994 次
发布时间:2019-06-12

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

Django-ModelForm

  • 耦合度高,不适用于大程序,适用于小程序
  • 功能集成了Django-Models和Django-Form
  • 数据库操作
  • 表单数据验证
  • HTML上次提交的数据
  • 初始化显示页面
  • 生成HTML标签

1.ModelForm的用法

from django import formsfrom django.forms import widgets as Fwidgets from django.forms import fields as Ffields # 从源码可以看出forms.Form与forms.ModelForm都继承于BaseForm# is_valid、cleaned_data、errors全部继承于BaseForm# 所以验证功能在ModelForm同样适用calss userInfoModelForm(forms.ModelFrom):    #class中不要加每行之间不要增加逗号    class Meta:        model = models.UserInfo    -->指向对应的model数据类        fields  = "__all__"        -->指向所有字段        # fields = ["username","email"]        # exclude = ["username"]        #字典        labels = {            -->与model字段中的verbose_name 含义一样,如果不想在model中做过多的操作,也可以在此处添加        "username":“用户名",        "emial": "邮箱"                ......        }        help_text = {        "username" : "请填写用户名"    -->用户提示        ......        }        #注意此处由于字段名与导入的模块名相同,我们我们需要将widgets重命名为Fwidgets否则无法使用        #ModelForm没有自己默认的widgets只能使用Form的插件        widgets = {                    "username": Fwidgets.Textarea(attrs={
"class":"c1"} ...... } -->指定插件 error_messages={ "__all__":{ } "email":{ "require":"邮箱不能为空", "invalid":"邮箱格式错误" } } #Ffield的使用与Fwidgets的使用方法一样,都是因为字段名和模块名重名 field_classes = { "email":Ffields.URLField -->自定义字段类 #在models中email是邮箱字段,我们可以在ModelForm中自定制该字段的类型 } localized_fields = ("ctime",) #本地化,如:根据不同时区显示数据 example: 数据库中 2019-4-13 12:01:00 settings中的配置:——》需要让django知道当前的时区 TIME_ZONE = "Aisa/Shanghai" USE_TZ = True 显示: 2019-4-13 20:01:00

 2.ModelForm应用

def index(request):    if request.method == "GET":        obj = UserInfoModelForm()        return render(request, "index.html", {
"obj": obj}) elif request.method == "POST": obj = UserInfoModelForm(request.POST) if obj.is_valid(): obj.save()#自动将验证正确的数据添加到数据库中-->单表,一对多,多对多 # 自定制obj.save()保存操作 save==以下三步操作 # instance = obj.save(False) # instance.save() # obj.save_m2m() #print(obj.is_valid()) #print(obj.cleaned_data) #print(obj.errors) return render(request, "index.html", {
"obj": obj})编辑url:def user_edit(request, nid): if request.method == "GET": user_obj = models.UserInfo.objects.filter(id=nid).first() mf = UserInfoModelForm(instance=user_obj) return render(request, "user_deit.html", {
"mf": mf, "nid": nid}) elif request.method == "POST": user_obj = models.UserInfo.objects,.filter(id=nid).first() mf =UserInfoModelForm(request.POST,instance=user_obj) # 如果上面instance不进行初始化,会重新生成一条数据,并不是更新。 if mf.is_valid(): mf.save() else: print(mf.errors.as_json()) reutrn render(request, "user_edit.html",{"mf": mf, "nid":nid}) ModelForm也拥有clean等方法,用法与form一样同时可以支持在modelForm中自定义生成新的字段,来做局部控制,并不会存入数据库

 

转载于:https://www.cnblogs.com/wangxingwei/p/10709800.html

你可能感兴趣的文章
Android WebView常见问题及解决方案汇总
查看>>
[BZOJ4025]二分图
查看>>
HTML5 Canvas玩转酷炫大波浪进度图
查看>>
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
查看>>
电话录音系统说明书
查看>>
JVM(1)——IDEA启动分配内存大小及GC日志打印
查看>>
oracle 批量更新之update case when then
查看>>
text3
查看>>
自己写的连击文字特效
查看>>
【Android】eclipse打不开的解决办法和“Jar mismatch! Fix your dependencies”的解决
查看>>
Mysql查询某字段值重复的数据
查看>>
Java 自学笔记-基本语法3setOut()方法设置新的输出流
查看>>
cocos2d-JS 模块 anysdk 概述
查看>>
docker镜像mac下保存路径
查看>>
docker使用 命令
查看>>
关于C#操作INI文件的总结
查看>>
ZeptoLab Code Rush 2015 B. Om Nom and Dark Park
查看>>
ctci1.2
查看>>
[译]RabbitMQ教程C#版 - 路由
查看>>
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
查看>>