Django的ModelForm
这个组件的功能就是把model和form组合起来
1.创建ModelForm
1.model.py中创建模型表
class Book(models.Model):title=models.CharField(max_length=32)price=models.DecimalField(max_digits=8,decimal_places=2)pub_date=models.DateField()publish=models.ForeignKey("Publish")authors=models.ManyToManyField("Author")def __str__(self):return self.title
2.首先导入ModelForm
from django.forms import ModelForm在视图函数中,定义一个类,比如就叫SBookModelForm,这个类要继承ModelForm,在这个类中再写一个原类Meta(规定写法,并注意首字母是大写的)
class BookModelForm(ModelForm):class Meta:1.#对应的Model中的类,对哪张表设置,就写哪张表model=models.Book2.#校验的字段#fields=["title","price","pub_date"]fields="__all__"3.自定义错误提示:error_messages = {'name':{'required':"用户名不能为空",},'age':{'required':"年龄不能为空",},}4.#widgets用法,比如把输入用户名的input框给为Textareafrom django.forms import widgets as wid #因为重名,所以起个别名widgets={"pub_date":wid.TextInput(attrs={"type":"date"})}5.labels,自定义在前端显示的名字labels= {"name":"用户名","price":"价格"}def clean_title(self):return self.cleaned_data.get("title")
2.基于ModelForm添加数据
def addbook(request):if request.method=="POST":form=BookModelForm(request.POST)if form.is_valid():form.save() # create方法 :BookModelForm.Meta.model.objects.create(**form.cleaned_data) return redirect("/books/")else:return render(request, "addbook.html", locals())form=BookModelForm()return render(request,"addbook.html",locals()) addbook.html: <form action="" method="post" novalidate>{% csrf_token %}{% for field in form %}<p><label for="">{{ field.label }}</label>{{ field }} <span>{{ field.errors.0 }}</span></p>{% endfor %}<input type="submit"> </form>
3.基于ModelForm编辑数据 (instance)
def changebook(request,id):edit_book = models.Book.objects.get(pk=id)if request.method=="POST": form = BookModelForm(request.POST,instance=edit_book)if form.is_valid():form.save() # update方法: edit_book.update(form.cleaned_data)return redirect("/books/")else:return render(request, "addbook.html", locals())form=BookModelForm(instance=edit_book)return render(request,"changebook.html",locals()) changebook.html:
HTML
changebook.html: <form action="" method="post">{% csrf_token %}{{ form.as_p }}<input type="submit"> </form>
基于ModelForm的图书管理系统
from django.forms import ModelFormdef books(request):book_list=models.Book.objects.all()return render(request,"book_list.html",{"book_list":book_list})from django.forms import widgets as widclass BookModelForm(ModelForm):class Meta:model=models.Book#fields=["title","price","pub_date"]fields="__all__"labels={"title":"书籍名称","price":"价格"}error_messages={"title":{'required':"书籍名称不能为空",}},widgets={"pub_date":wid.TextInput(attrs={"type":"date"})}def clean_title(self):return self.cleaned_data.get("title")def addbook(request):if request.method=="POST":form=BookModelForm(request.POST)if form.is_valid():form.save() # create方法return redirect("/books/")else:return render(request, "addbook.html", locals())form=BookModelForm()return render(request,"addbook.html",locals())def changebook(request,id):if request.method=="POST":edit_book = models.Book.objects.get(pk=id)form = BookModelForm(request.POST,instance=edit_book)if form.is_valid():form.save() # update方法 edit_book.update(request.POST)return redirect("/books/")else:return render(request, "addbook.html", locals())edit_book=models.Book.objects.get(pk=id)form=BookModelForm(instance=edit_book)return render(request,"changebook.html",locals())def deletebook(request,id):models.Book.objects.get(pk=id).delete()return redirect("/books/")
Views.py
''' book_list <ul>{% for book in book_list %}<li>{{ book.title }}---{{ book.price }}-----{{ book.publish.name }}<a href="/books/{{ book.pk }}/change/">编辑</a><a href="/books/{{ book.pk }}/delete/">删除</a></li>{% endfor %} </ul> changebook <form action="" method="post">{% csrf_token %}{{ form.as_p }}<input type="submit"> </form> addbook <form action="" method="post" novalidate>{% csrf_token %}{% for field in form %}<p><label for="">{{ field.label }}</label>{{ field }} <span>{{ field.errors.0 }}</span></p>{% endfor %}<input type="submit"> </form> '''
HTML
转载于:https://www.cnblogs.com/zgf-666/p/9161666.html
Django的ModelForm相关推荐
- Django之ModelForm验证
一.简介 Django中Model负责操作数据库,并且具有简单的数据库验证功能(基本不用):Form用于用户请求的验证,具有强悍的数据库验证功能:ModelForm是将二者合二为一,即可用于数据库操作 ...
- Django 之 modelForm (edit.html页面的编写)
models.py文件 from django.db import models# Create your models here. from django.db import models# Cre ...
- Django Form ModelForm modelfromset
forms 组件 Form 组件 form表单完成的事情 提供input可以提交数据 对提交的数据进行校验 提供错误提示 定义form组件 from django import forms class ...
- Django之modelform
1.原生form表单 2.forms组件2 3.modleForm组件 4.前端form表单,后台form组件(可以没有数据库) 5.django补充 - 请求流程 1.原生form表单 步骤: 1. ...
- Django之ModelForm详解
前言 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来.先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱 ...
- Django之ModelForm使用
一:什么是ModelForm呢? Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 数据验证 数据库操作 model有操作数据库的字段,for ...
- django自定义modelform的choice选项展示内容
应用场景 在新增项目的任务时,需要指派任务的执行者.默认modelform会吧执行者所在的用户表的所有数据全部放在choice中. 但是实际仅需要展示当前项目参与者的人,从中选择执行者,故我们需要对m ...
- python django 表单_Django ModelForm与Form
django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...
- Django——Model
一. ORM 在 MVC 或者说 MTV 设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢? 我们可以在 Python 代码中嵌入 SQL 语句. 但是问题又来了,Python 怎么连接 ...
最新文章
- html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
- 从RCNN到Fast RCNN,再到Faster RCNN的奥秘
- 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
- 计算机word基本知识选择题,2017计算机基础考试选择题「附答案」
- jquery1.4 API 区别与更新中文版(beta)
- 昆明理工津桥学院计算机,昆明理工大学津桥学院大一计算机考试试题练习
- 深度学习——用softmax函数来规范可变参数
- 【Antlr】cannot create implicit token for string literal in non-combined grammar xx
- 不懂*和*区别的可以进来看看
- 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
- Kafka安装之一 Zookeeper
- 牛津3000释义词典_常见英语词典集锦
- 安卓视频播放器(TV)
- matlab程序运行完后响铃,matlab基本
- Windows7无法显示.png、.jpg图片缩略图的问题
- Vue 接入腾讯云【实时音视频】TRTC
- 使用树莓派搭建家用 NAS
- 勒索软件攻击:如何使用加密来保护您的数据
- android gps无法定位,解决GPS无法定位问题
- html新手引导遮罩,新手引导遮罩与高亮的实现
热门文章
- el表达式遍历list中的list_EL表达式获取map和list集合中的值 | 学步园
- python diango 并发_python - django Model 并发写数据出现重复值
- 2019_7_30python
- 福大软工 · 第十二次作业 - Beta答辩总结
- datatable.js 服务端分页+fixColumns列固定
- 猿题库 iOS 客户端架构设计-唐巧
- Linux android studio :'tools.jar' seems to be not in Android Studio classpath.
- HDU OJ 动态规划46题解析
- 中秋应景诗词歌赋赏析
- mysql 之 一个库中所有表复制到另一个数据库中的方法和工具