ModelForm组件和forms组件补充

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(instance=edit_book_obj,request.POST)
        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 组件
"""

原文地址:https://www.cnblogs.com/neozheng/p/9434251.html

时间: 2024-10-08 23:54:27

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

多对多表的创建方式 forms组件 session与cookie

1.多对多表的创建方式 2.forms组件3.session 与 cookie 1.多对多表的创建方式 1.全自动(推荐使用*) class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) authors = models.ManyToManyField(to='Author') class Author(m

django(forms组件、cookies与session)

一.forms组件 1.功能 - 渲染页面 - 校验数据 - 展示信息 需要先写一个类,该类类似于models中的表类 from django import forms class MyRegForm(forms.Form): # 用户名最少3位最多8位 username = forms.CharField(max_length=8,min_length=3) password = forms.CharField(max_length=8,min_length=3) # email字段必须填写符

Django forms组件【对form舒心l了】

目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用ModelForm关键就在于model's field mapping to form's field ModelForm.save() 详解 class Meta !!!重写覆盖默认的modelField字段(即自定义一些modelform属性) form有关多选择Field的使用 form's fi

015---Django的forms组件

Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 先在应用目录下my_for

Django&mdash;&mdash;forms 组件

一.forms简介 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django forms组件主要功能: 生成页面可用的HTML标签 对用户提交的 数据进行校验 保留上次输入的内容 二.如何使用Django forms 1.注册功能: 渲染前端标签获取用

第六章、forms组件

目录 第六章.forms组件 一.注册功能手写 二.forms组件完整写法 基本使用 三.forms组件前端渲染标签组件 三.forms组件其他知识点 在python console测试 校验数据 form组件数据校验的规则 四.其他几个常见字段类型 五.forms组件所有内置字段类型 六.forms组件的字段常见参数 用正则来约束 七.forms组件钩子函数 八.通过后端修改前端的样式 第六章.forms组件 一.注册功能手写 要求 1.注册功能 用户输入的用户名中 不能包含西游记 如果包含了

Django框架进阶7 forms组件(pycharm内置测试环境Python Console), cookie与session操作

forms组件 写一个注册页面 获取用户输入的用户名和密码 用户点击注册发送到后端做用户名密码的校验 用户名中不能包含金瓶mei 不符合社会主义核心价值观 密码不能为空 你个DSB,密码怎么能为空 1.手写获取用户输入的前端页面代码 渲染页面 2.后端获取用户数据并做合法性校验 校验数据 3.将校验之后的结果渲染到前端页面 展示信息 不用forms组件代码: app01/views.py from django.shortcuts import render,HttpResponse # Cre

第八篇:forms组件,cookie和session

forms组件 常常用于注册页面的用户输入的数据进行校验 渲染页面 校验数据 展示信息 在使用forms组件的时候,需要在应用下新建一个py文件,例如: myforms.py 在文件中写一个类: from django import forms class MyRegForm(forms.Form): # 用户名最少3位最多8位 username = forms.CharField(max_length=8,min_length=3) password = forms.CharField(max

Django组件—forms组件

forms组件: 校验字段功能: 针对一个实例:注册用户. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板:register.html <!DOCTYPE html> <html