Django的Modelforms用法简介

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/")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 利用Django提供的ModelForm增删改数据的方法

    上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现有模型的增删改方法. 一个简单的例子加以说明,前提是你已经具备Django创建项目应用的基本知识: 01.首先创建一个简单的模型,模型只有三个文本字段,标题 title , 内容 text , 添加日期 date_added ,如下: # models.py from django.db import model

  • Django如何自定义model创建数据库索引的顺序

    首先这是一个先有鸡还是先有蛋的问题,大部分时候数据都来自excel的整理,当数据越来越多,需要分析的点也越来越多的时候,通过excel来管理显然有些吃力了. 这时候就需要将excel导入到数据库中,然而model创建的索引并非是我们编写时候的顺序,特别是当存在 models.ForeignKey 时,我们必须要先创建 ForeignKey的class,最后再创建总表. 为了保证数据库的索引跟excel的索引一致,我们需要对model中的索引字段做一系列的处理(可能这是一个野路子). 首先当然是先

  • 基于Django的ModelForm组件(详解)

    创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import models class 类名(ModelForm): class Meta: model = models.表名 #models中的表名 fields="__all__", # 字段 exclude=None, # 排除字段 widgets=None, # 自定义插件 error_message

  • Django ModelForm组件使用方法详解

    一.创建ModelForm from django.forms import ModelForm from appxx import models from django.forms import widgets as wdt # 因为重名,所以起个别名 #定义一个类,比如BookForm,这个类要继承ModelForm,在这个类中再写一个原类Meta(规定写法,注意首字母是大写的) #在这个原类中,有以下属性(部分): class BookForm(ModelForm): class Meta

  • 解决django中ModelForm多表单组合的问题

    django是python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种"条条大路通罗马"的感觉.这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准: 1.相同的功能用最少的代码实现(代码少BUG也会少): 2.相对最易于理解,从而易于维护和扩展.书归正传,web服务允许用户输入,基本上要靠表单.而django对表单的支持力度非常大,我们用不着在浏览器端的html文件里写大量<fo

  • Django的Modelforms用法简介

    from django.forms import ModelForm class Test(ModelForm): # 把那张表转化成form组件 class Meta: # 这个意思即是把Article转化成form组件 model = models.Article # 把表中的所有的字段都做转化,这里也可以传递一个list,可以指定显示某些字段 fields = "__all__" # modelform组件的使用方法和forms组件的用法一样,但是i如果要保存出数据的时候,可以直

  • Django框架验证码用法实例分析

    本文实例讲述了Django框架验证码用法.分享给大家供大家参考,具体如下: 验证码 1.作用 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力. 验证码需要使用绘图 Pillow pip3 install Pillow 核心API Image 需要模式 尺寸 背景色 ImageDraw 绑定画布 模式 封装了绘制的API text point line arch ImageFont 手动指定字体 2.业务流程 绘制验证

  • 对Django的restful用法详解(自带的增删改查)

    什么是rest REST是所有Web应用都应该遵守的架构设计指导原则. Representational State Transfer,翻译是"表现层状态转化". 面向资源是REST最明显的特征,对于同一个资源的一组不同的操作.资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词. REST要求,必须通过统一的接口来对资源执行各种操作.对于每个资源只能执行一组有限的操作. GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT(PATCH)用

  • 详解Django admin高级用法

    使用Django意味着后台框架的几乎所有内容都会和Django产生互动,排除功能全部手撸的情况. Django 后台admin有大量的属性和方法,拥有强大的功能和自定义能力.通过完整的代码来看Django admin的基础设置和高级用法,并结合form表单来实现深度自定义. 简单使用 如果只是使用admin自带的数据管理功能,只需要将模型注册到admin中,就可以实现. from django.contrib import admin admin.site.register(News) admi

  • Django框架模板用法入门教程

    本文实例讲述了Django框架模板用法.分享给大家供大家参考,具体如下: Django 模板标签 if/else 标签 基本语法格式如下: {% if condition %} ... display {% endif %} 或者: {% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %} 根据条件判断是否输出.if/else 支持嵌套. {

  • pytest基本用法简介

    1.安装pytest,打开dos窗口输入: pip install pytest 2.通过pycharm工具下载 3.创建pytest测试用例步骤 # 定义测试类 class TestDivide: # 定义测试方法 def test_divide_01(self): result = divide(1,1) print(result) 问题:右键运行没有pytest运行的方式的处理步骤 第一步:检查文件名和文件所在目录是否合法,对应第一点 第二步:修改默认运行方式为pytest 第三步:删除历

  • Django分页器的用法你都了解吗

    Django是一个大而全的框架.需要明确的是,传参进行分页获取分页后的数据,一般都是通过向服务器发送get请求的方式实现的,在向后端服务发送查看数据的同时可以携带一个或多个参数并发送get请求来实现分页查看功能 前面总结过drf框架中分页器的使用,本文主要介绍在利用Django开发MVT模型项目时分页器的使用 1.准备基础数据 设计表模型 为了体现分页的效果,需要先创建一个表并准备较多数据,模型如下 from django.db import models # Create your model

  • Django分页器的用法详解

    Django是一个大而全的框架.需要明确的是,传参进行分页获取分页后的数据,一般都是通过向服务器发送get请求的方式实现的,在向后端服务发送查看数据的同时可以携带一个或多个参数并发送get请求来实现分页查看功能 1.准备基础数据 设计表模型 为了体现分页的效果,需要先创建一个表并准备较多数据,模型如下 from django.db import models # Create your models here. class Book(models.Model): title = models.C

  • Django框架模板用法详解

    目录 一.模板应用实例 二.Django 模板标签 1.变量 2.列表 3.字典 4.过滤器 5.if/else 标签 6.for 标签 7.ifequal/ifnotequal 标签 8.注释标签 9.include 标签 三.csrf_token 四.自定义标签和过滤器 五.配置静态文件 六.模板继承 1.父模板 2.子模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Dja

  • Java中StringTokenizer的用法简介汇总

    目录 StringTokenizer的用法 StringTokenizer 构造方法: StringTokenizer 常用方法: 补充:下面在介绍下StringTokenizer的使用 下文笔者讲述StringTokenizer对象的简介说明,如下所示 StringTokenizer的简介 Java StringTokenizer属于java.util包 用于分隔字符串 StringTokenizer构造方法 StringTokenizer(String str): 构造一个用来解析 str

随机推荐