文档章节

ModelForm组件和forms组件补充

o
 osc_4nmshwhm
发布于 2018/08/06 23:42
字数 620
阅读 10
收藏 0

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 组件 """

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在virtualenv中使用Python 3 - Using Python 3 in virtualenv

问题: Using virtualenv , I run my projects with the default version of Python (2.7). 使用virtualenv ,我使用默认版本的Python(2.7)运行项目。 On one project, I need to use Pyth......

富含淀粉
27分钟前
9
0
Python的__init__和self是做什么的? - What __init__ and self do on Python?

问题: I'm learning the Python programming language and I've came across something I don't fully understand. 我正在学习Python编程语言,遇到了一些我不太了解的东西。 In a method ......

javail
57分钟前
15
0
OSChina 周五乱弹 —— 你大妈还是你大妈

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @watergood:是时候分享一波我的这张纯音乐歌单了,过去的五年多时间里,我陆陆续续地把听到的好听的纯音乐添加了进去,目前一共65首,相信总...

小小编辑
今天
25
0
在Objective-C中生成随机数 - Generating random numbers in Objective-C

问题: I'm a Java head mainly, and I want a way to generate a pseudo-random number between 0 and 74. In Java I would use the method: 我主要是Java头,我想要一种生成0到74之间的伪随......

技术盛宴
今天
13
0
ftp-ftps-sftp的关系

Ftp FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作...

独钓渔
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部