Django的Modelforms用法简介

yipeiwu_com6年前Python基础
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/")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python如何import文件夹下的文件(实现方法)

Python如何import文件夹下的文件(实现方法)

Python的import包含文件功能就跟PHP的include类似,但更确切的说应该更像是PHP中的require,因为Python里的import只要目标不存在就报错程序无法往下执行...

解决Python print输出不换行没空格的问题

今天在做编程题的时候发现Python的print输出默认换行输出,并且输出后有空格。 题目要求输出 122 而我的输出是: 1 2 2 于是我百度查到取消print自动换行的方法:就是在...

python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法

如下所示: dir_in = os.path.join(os.path.dirname(__file__), r"oldApp")     dir_in = un...

python好玩的项目—色情图片识别代码分享

python好玩的项目—色情图片识别代码分享

一、实验简介 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图像处理库,会编写算法来划分图像的皮肤区域 1.1. 知识点 Python 3 的模块的安...

深入分析python数据挖掘 Json结构分析

深入分析python数据挖掘 Json结构分析

json是一种轻量级的数据交换格式,也可以说是一种配置文件的格式 这种格式的文件是我们在数据处理经常会遇到的 python提供内置的模块json,只需要在使用前导入即可  ...