from django.forms import ModelForm

    class Test(ModelForm):
# 把那张表转化成form组件
class Meta: # 这个意思即是把Article转化成form组件
model = models.Article # 把表中的所有的字段都做转化,这里也可以传递一个list,可以指定显示某些字段
fields = "__all__" # modelform组件的使用方法和forms组件的用法一样,但是i如果要保存出数据的时候,可以直接调用save方法保存就可以了,无论是单表,一对多,还是多对多 # 如果增加数据
# form = Test(request.POST)
# if form.isvalid():
# form.save()
# 这样就可以直接保存 # 如果编辑数据,用下面的方法就可以把当前的对象的值渲染到form表单中,无论是单表,一对多,还是多对多
# obj = models.Article.objects.all().first()
# form = Test(instance=obj)
# 上面是实现渲染数据到form表单 # form = Test(request.POST,instance=obj)
# if form.isvalid():
# form.save() # 这个就是实现更新操作,和增加操作唯一的区别就是通过instance传递一个要编辑的对象进去就可以了

  

简单的用了一下model_forms,觉得还是不是很好用

我是用书、出版社,作者三张表来做这个联系

首先下面这个函数是用来展示书籍信息

def test_models(request):
method = request.method.lower()
if method == "get":
body_list = []
obj = models.Book.objects.all() head_list = models.Book._meta.get_fields() for i in obj:
temp = []
temp.append(i.bid)
temp.append(i.title)
temp.append(i.publish)
temp.append(i.auther.all())
body_list.append(temp)
return render(request,"modelform_html1.html",locals())
else:
pass

  

下面这个类就是modelform的类

class test(ModelForm):
class Meta:
model = models.Book
fields = "__all__"
labels = {"title":"书籍的名称","auther":"作者","publish":"出版社"}
error_messages = {
"title":{"required":"不允许为空",
"invalid":"格式错误"
}
}
widgets = {
"title":wd.TextInput(attrs={"placeholder":"密码"})
} field_classes = {
"title":forms.EmailField
}

  

  

下面这个函数是用来处理处理添加书籍的操作

def add(request):
method = request.method.lower()
if method == "get":
model_form_obj = test()
for i in model_form_obj:
print(i.label_tag(),"----------------------")
return render(request,"modelfrom_add.html",locals()) else:
model_form_obj = test(request.POST)
if model_form_obj.is_valid():
model_form_obj.save() return redirect("/app2/test_models/")
else:
print("出错了")
model_form_obj = test(request.POST) return render(request, "modelfrom_add.html", locals())

  

下面这个函数是用来处理编辑书籍的

def edit(request):
method = request.method.lower()
book_obj = models.Book.objects.get(bid=int(request.GET.get("id"))) if method == "get":
model_form_obj = test(instance=book_obj)
return render(request,"modelfrom_add.html",locals())
else:
model_form_obj = test(request.POST,instance=book_obj)
model_form_obj.save()
return redirect("/app2/test_models/")

  

参考博客

http://www.cnblogs.com/wupeiqi/articles/6144178.html  武sir:Form组件

http://www.cnblogs.com/wupeiqi/articles/6216618.html  武sir:Model

http://www.cnblogs.com/wupeiqi/articles/6229414.html  武sir:ModelForm

Django的Modelforms的介绍的更多相关文章

  1. Django默认权限机制介绍及实践

    演示Django版本为当前最新版本v2.2 当Django配置文件中的INSTALL_APPS包含了django.contrib.auth时,就默认启用了一个简单的权限系统,提供了为用户或组分配权限的 ...

  2. Celery在Django中的使用介绍

    Celery在Django中的使用介绍 Celery简介 celery是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具. 它是一个专注于实时处理的任务队列,同时也 ...

  3. 用Django做一个团队介绍

    所用工具 Pycharm 社区版 Django 2.x Python 3.6.4 总目录 settings中的设置 总的路由设置 templates中的index.html文件 <!DOCTYP ...

  4. Django REST framework框架介绍和基本使用

    Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...

  5. django中的ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  6. Django中的ORM介绍,字段以及字段的参数。

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  7. Django视图层详细介绍

    1 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  8. Django框架学习-01Django介绍

    01-Django介绍 02-HTTP协议介绍 01-Django介绍 1.什么是Web框架? 随着Web最新发展趋势的不断升级,Web项目开发也越来越难,而且需要花费更多的开发时间.所以,Web程序 ...

  9. Django 中得ORM介绍和字段及字段参数

    ORM 介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说 ORM 是通过使用 ...

随机推荐

  1. jquery实现增删改(伪)-老男孩作业day13

    使用jquery进行,文件的编写,实现自增id,删除,添加,编辑模式. jquery放在本地,src="jquery_js.js" 可以改成其他,或者在线的路径 readme &l ...

  2. ABAP-container拆分

    1.界面 2.代码 *&---------------------------------------------------------------------* *& Report ...

  3. mui init 出现无法引入子页面问题

    1. 检查项目中是否重复出现了 mui.init() 函数; mui.init({ subpages: [{ styles: { // top: "44px", top: &quo ...

  4. printf 输出% 和 \

    在小白第一章后面1.5.3中有仨题: 1 试着把%d中的两个字符(百分号和小写字母d)输出到屏幕. 2 试着把\n中的两个字符(反斜线和小写字母n)输出到屏幕. 3 像 1.2这样需要“特殊方法”才能 ...

  5. 重建redo文件

    需求背景 由于前期安装oracle时redo文件大小或者路径规划不合理需要进行修改,以便满足性能测试要求.redo文件规划大小建议与生产环境一致. 重做日志相关数据字典 1.v$log  记录数据库中 ...

  6. 自行编译mwan加入openwrt里

    参考源文:http://www.right.com.cn/forum/thread-124449-1-1.html 本例以 opoenwrt 12.09正式版为例,原软件来自openwrt 英文论坛: ...

  7. [原创]delphi一次性批量在TScrollBox中显示N个复选框TCheckBox的源码

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  8. IE快捷键

    键盘快捷键 在后台打开新选项卡中的链接 CTRL+单击 在前台打开新选项卡中的链接 CTRL+SHIFT+单击 在前台打开新选项卡 CTRL+T 从地址栏打开新选项卡 ALT+ENTER 从搜索框打开 ...

  9. cv2对图像进行旋转和放缩变换

    旋转: def get_image_rotation(image): #通用写法,即使传入的是三通道图片依然不会出错 height, width = image.shape[:2] center = ...

  10. hdu2669-Romantic-(扩展欧几里得定理)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...