forms组件补充:

forms组件的三个字段:ChoiceField, ModelChoiceField & ModelMultipleChoiceField

# forms组件:ChoiceField,ModelChoiceField,ModelMultipleChoiceField:这三个可用于渲染 <select> 标签

gender = forms.ChoiceField(choices=((1,"男"),(2,"女")))  # 不与数据库打交道时用 ChoiceField; 语法:forms.ChoiceField(choices=(一个一个的元组))

# 和数据库打交道:
# 单选用ModelChoiceField:
publish = forms.ModelChoiceField(queryset=Publish.objects.all()) # 语法:forms.ModelChoiceField(queryset=QuerySet) # 多选用ModelMultipleChoiceField:
author = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) # 语法:forms.ModelMultipleChoiceField(queryset=QuerySet)

ModelForms 组件:

ModelForms组件的作用:验证字段、渲染标签和与数据库交互

from django import forms
from django.forms import widgets class BookForm(forms.ModelForm):
class Meta:
model = Book # 这句代码的含义:把Book这张model表能够当成 form组件表去使用;同时 Book 这张model表和 BookForm 表一一对应
fields = "__all__" # forms 组件表所使用的字段
labels = { # 给字段添加 label
"title":"书籍名称",
"price":"价格"
}
widgets = { # 给字段添加 widgets
"title":widgets.TextInput(attrs={"class":"form-control"}),
"price":widgets.TextInput(attrs={"class":"form-control"}),
"date":widgets.TextInput(attrs={"class":"form-control","type":"date"}), # date类型的数据要在 .TextInput(attrs={"type":"date"}) 中 加上 attrs={"type":"date"}
"publish":widgets.Select(attrs={"class":"form-control"}), # 单选框要用 Select
"authors":widgets.SelectMultiple(attrs={"class":"form-control"}) # 多选框要用 SelectMultiple
}
error_messages = { # 为字段添加错误信息
"title":{"required":"不能为空"},
"price":{"required":"不能为空"},
} # 添加书籍信息
def addbook(request):
if request.method == "POST":
form = BookForm(request.POST) # 前端传过来的书籍信息(在request.POST中)传入 BookForm 进行验证
if form.is_valid(): # ModelForm 拥有 Form组件的方法 # 验证 form 是否合法
form.save() # form.save() 就是把该记录保存到 Book 这张model表中; # 因为 BookForm 和 Book 是对应关系,所以 save()时能直接存到 Book 表中 return redirect("/books/") form = BookForm() # 通过 BookForm 就能把 Book 这张model表当 Form表去使用 return render(request,"addbook.html",{"form":form}) # 把 form 传入前端,直接渲染 # 编辑书籍信息
def editbook(request,edit_book_id):
edit_book_obj = Book.objects.filter(pk=edit_book_id).first() if request.method == "POST":
form = BookForm(request.POST,instance=edit_book_obj)
if form.is_valid:
form.save() # 此时 .save()是 update 操作
"""
当 BookForm()中没有 instance= xx 时, form.save()是 create 操作;当 BookForm()中有 instance=obj 时,此时 form.save()是update 操作,并且是将 request.POST 中的数据更新到 前面的 instance=obj 这个对象中
"""
return redirect("/books/") form = BookForm(instance=edit_book_obj) # 拿 edit_book_obj 这个所要编辑的书籍对象,放入 BookForm中实例化得到 form,此时form传入前端渲染时,能把 所要编辑的书籍信息直接显示出来:<input>,<select>的value值、selected return render(request,"editbook.html",{"form":form}) """
model表中的 CharField,DateField,EmailField等等,只有在涉及到 ModelForm 的时候才有意义; ModelForm会让model表按照各自的 Field类型转化成相应的 forms 组件
"""

ModelForm组件和forms组件补充的更多相关文章

  1. forms组件补充与ModelForm简单使用与cookie与session

    目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...

  2. Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08

    目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...

  3. 多对多第三张表的创建方式 和 forms组件的使用

    目录 一.多对多第三张表的创建 1. 全自动方式 (1)实现代码 (2)优点和不足 2. 纯手撸方式(了解) (1)实现代码 (2)优点和不足 3. 半自动方式(推荐使用) (1)实现代码 (2)优点 ...

  4. Python-S9—Day85-ORM项目实战之forms组件以及Modelform补充、跨域请求及应用

    01 forms组件补充1 02 forms组件补充2 03 ModelForm回顾 04 浏览器的历史 05 jsonop实现跨域请求 06 jsonop实现跨域请求2 07 jsonop实现跨域请 ...

  5. Django基础之forms组件中的ModelForm组件

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

  6. Django框架的forms组件与一些补充

    目录 一.多对多的三种创建方式 1. 全自动 2. 纯手撸(了解) 3. 半自动(强烈推荐) 二.forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组 ...

  7. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

  8. Django组件——forms组件

    一.校验字段功能 通过注册用户这个实例来学习校验字段功能. 1.模型:models.py from django.db import models # Create your models here. ...

  9. Django学习之八:forms组件【对form舒心了】

    目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...

随机推荐

  1. Java多线程——线程的优先级和生命周期

    Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  2. js 将XML字符串解析成XML文档 --- attribute construct error--- 空白字符与空格问题

    最近在做xml在线编辑器,遇到一个字符串解析成xml文档的问题,记录一下. 原始xml内容读取自xml文档 <label class="test" id="labe ...

  3. GridView 中绑定DropDownList ,下拉框默认选中Label的值

    在GridView中,我们 有时候要绑定值. 前台绑定的代码可以这样 <asp:TemplateField HeaderText="当前状态" ItemStyle-Horiz ...

  4. 一台机器运行多个JBoss多实例

    JBossXMLJVMTomcat应用服务器  我们经常会遇到这种情况,有时候希望在同一台机器上部署若干个JBoss实例,上面运行不同的应用程序,这样的话无论由于什么原因需要对某个JBoss实例进行关 ...

  5. 最近面试oracle 数据库的知识点

    1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windo ...

  6. Node.js——流的下载

    https://cnodejs.org/topic/59d8f43b2543cb3368b1623e var request = require('request'); var fs = requir ...

  7. AIX 10201 HA RAC 安装+升级到10204

    1:查看系统版本 [rac1:root:/hacmp/hacmp5.4/ha5.4/installp/ppc] oslevel -s 6100-06-06-1140 lslpp -al bos.adt ...

  8. Winsock2_WSADATA

    使用Winsock2进行win下网络编程的第一步是初始化Winsock.其中需要创建一个WSADATA类型的变量,这个变量用来保存Windows socket的实现信息. typedef struct ...

  9. spring-shiro 配置

    配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www ...

  10. 最小生成树Prim算法 Kruskal算法

    Prim算法(贪心策略)N^2 选定图中任意定点v0,从v0开始生成最小生成树 树中节点Va,树外节点Vb 最开始选一个点为Va,其余Vb, 之后不断加Vb到Va最短距离的点 1.初始化d[v0]=0 ...