这个组件的功能就是把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相关推荐

  1. Django之ModelForm验证

    一.简介 Django中Model负责操作数据库,并且具有简单的数据库验证功能(基本不用):Form用于用户请求的验证,具有强悍的数据库验证功能:ModelForm是将二者合二为一,即可用于数据库操作 ...

  2. Django 之 modelForm (edit.html页面的编写)

    models.py文件 from django.db import models# Create your models here. from django.db import models# Cre ...

  3. Django Form ModelForm modelfromset

    forms 组件 Form 组件 form表单完成的事情 提供input可以提交数据 对提交的数据进行校验 提供错误提示 定义form组件 from django import forms class ...

  4. Django之modelform

    1.原生form表单 2.forms组件2 3.modleForm组件 4.前端form表单,后台form组件(可以没有数据库) 5.django补充 - 请求流程 1.原生form表单 步骤: 1. ...

  5. Django之ModelForm详解

    前言 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来.先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱 ...

  6. Django之ModelForm使用

    一:什么是ModelForm呢? Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 数据验证 数据库操作 model有操作数据库的字段,for ...

  7. django自定义modelform的choice选项展示内容

    应用场景 在新增项目的任务时,需要指派任务的执行者.默认modelform会吧执行者所在的用户表的所有数据全部放在choice中. 但是实际仅需要展示当前项目参与者的人,从中选择执行者,故我们需要对m ...

  8. python django 表单_Django ModelForm与Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...

  9. Django——Model

    一. ORM 在 MVC 或者说 MTV 设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢? 我们可以在 Python 代码中嵌入 SQL 语句. 但是问题又来了,Python 怎么连接 ...

最新文章

  1. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
  2. 从RCNN到Fast RCNN,再到Faster RCNN的奥秘
  3. 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
  4. 计算机word基本知识选择题,2017计算机基础考试选择题「附答案」
  5. jquery1.4 API 区别与更新中文版(beta)
  6. 昆明理工津桥学院计算机,昆明理工大学津桥学院大一计算机考试试题练习
  7. 深度学习——用softmax函数来规范可变参数
  8. 【Antlr】cannot create implicit token for string literal in non-combined grammar xx
  9. 不懂*和*区别的可以进来看看
  10. 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
  11. Kafka安装之一 Zookeeper
  12. 牛津3000释义词典_常见英语词典集锦
  13. 安卓视频播放器(TV)
  14. matlab程序运行完后响铃,matlab基本
  15. Windows7无法显示.png、.jpg图片缩略图的问题
  16. Vue 接入腾讯云【实时音视频】TRTC
  17. 使用树莓派搭建家用 NAS
  18. 勒索软件攻击:如何使用加密来保护您的数据
  19. android gps无法定位,解决GPS无法定位问题
  20. html新手引导遮罩,新手引导遮罩与高亮的实现

热门文章

  1. el表达式遍历list中的list_EL表达式获取map和list集合中的值 | 学步园
  2. python diango 并发_python - django Model 并发写数据出现重复值
  3. 2019_7_30python
  4. 福大软工 · 第十二次作业 - Beta答辩总结
  5. datatable.js 服务端分页+fixColumns列固定
  6. 猿题库 iOS 客户端架构设计-唐巧
  7. Linux android studio :'tools.jar' seems to be not in Android Studio classpath.
  8. HDU OJ 动态规划46题解析
  9. 中秋应景诗词歌赋赏析
  10. mysql 之 一个库中所有表复制到另一个数据库中的方法和工具