2018-10-12 15:24:23

From表单参考连接: https://www.cnblogs.com/yuanchenqi/articles/7614921.html

新增了ModelForm的使用,比Form 更省事更简洁!

越努力越幸运!还有30多天完成把luffycity项目完后面还有其他的flask.爬虫什么的,然后就学完啦!

明天周末,把博客再整理一下!!!!!

把自己的博客项目再优化一下!!!233333333!

越努力,越幸运!永远不要高估自己!

views.py

from django.shortcuts import render,redirect
from .models import *
from django import forms
from django.forms import widgets as wid
from django.forms import ModelForm # 让Model转换成form Meta是配置类
class BookForm(ModelForm):
class Meta:
model = Book
fields = "__all__"
labels = {
"title": "书籍名称",
"price": "价格"
}
# 在特定框里面加入 标签
widgets = {
"title": wid.TextInput(attrs={"class": "form-control"})
"price": wid.TextInput(attrs={"class": "form-control"})
"authors": wid.TextInput(attrs={"class": "form-control"})
}
# 配置错误信息
# error_messages{
# "": ""
# } # 这些等同于 下面原生的 BookForm(forms.Form) 类 """原生的BookForm"""
# class BookForm(forms.Form):
# title = forms.CharField(max_length=32,label="书籍名称")
# price = forms.DecimalField(max_digits=8, decimal_places=2,label="价格") # 999999.99
# 渲染的特定标签时候,加特定东西
# date = forms.DateField(label="日期",
# widget=widgets.TextInput(attrs={"type":"date"})
# )
# # 与数据库没关系用这个
# #gender=forms.ChoiceField(choices=((1,"男"),(2,"女"),(3,"其他")))
# # 与数据库有关系用下面俩
# #publish=forms.ChoiceField(choices=Publish.objects.all().values_list("pk","title"))
# # 单选下拉框
# publish=forms.ModelChoiceField(queryset=Publish.objects.all())
# authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all()) def books(request):
book_list=Book.objects.all()
return render(request,"books.html",locals()) """用原生form表单做的 """
# def addbook(request):
# if request.method=="POST":
# form = BookForm(request.POST)
# if form.is_valid():
# print("cleaned_data",form.cleaned_data)
# title=form.cleaned_data.get("title")
# price=form.cleaned_data.get("price")
# date=form.cleaned_data.get("date")
# publish=form.cleaned_data.get("publish")
# authors=form.cleaned_data.get("authors") # [1,2]
# book_obj=Book.objects.create(title=title,price=price,date=date,publish=publish)
# book_obj.authors.add(*authors)
# return redirect("/books/")
# form=BookForm()
# publish_list=Publish.objects.all()
# author_list=Author.objects.all()
# return render(request,"add.html",locals()) """用ModelForm做的add"""
def addbook(request):
if request.method=="POST":
form = BookForm(request.POST)
if form.is_valid():
form.save()
return redirect("/books/") """原生的form"""
# def editbook(request,edit_book_id):
# if request.method=="POST":
# title=request.POST.get("title")
# price=request.POST.get("price")
# date=request.POST.get("date")
# publish_id=request.POST.get("publish_id")
# author_pk_list=request.POST.getlist("author_pk_list") # [1,2]
#
# Book.objects.filter(pk=edit_book_id).update(title=title,price=price,date=date,publish_id=publish_id)
# book_obj=Book.objects.filter(pk=edit_book_id).first()
# book_obj.authors.set(author_pk_list)
# return redirect("/books/")
# edit_book=Book.objects.filter(pk=edit_book_id).first()
# form=BookForm()
# return render(request,"edit.html",locals()) """用ModelForm做的edit_books"""
def editbook(request,edit_book_id):
edit_book = Book.objects.filter(pk=edit_book_id).first()
if request.method == "POST":
# 传入个isinstance 对象,让他知道对谁 update
form = BookForm(request.POST, isinstance=edit_book)
if form.is_valid():
form.save()
return redirect("/books/")
form = BookForm(isinstance=edit_book)
return render(request, "edit.html", locals())

add.html和edit_book.html一样

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body> <h3>添加页面</h3> <form action="" method="post" novalidate>
{% csrf_token %} {% for field in form %}
<div>
{{ field.label }}
{{ field }}
</div>
{% endfor %} <input type="submit">
</form>
</body>
</html>

笔记

原生form

forms组件

    ChoiceField(Field)

    ModelChoiceField(ChoiceField)

    ModelMultipleChoiceField(ModelChoiceField)

    1 针对form表单设计form组件

modelform

     class Book(models.Model):

        title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
date=models.DateField()
publish=models.ForeignKey("Publish")
authors=models.ManyToManyField("Author") class BookForm(forms.Form):
title = forms.CharField(max_length=32,label="书籍名称")
price = forms.DecimalField(max_digits=8, decimal_places=2,label="价格") # 999999.99
date = forms.DateField(label="日期",
widget=widgets.TextInput(attrs={"type":"date"})
) #gender=forms.ChoiceField(choices=((1,"男"),(2,"女"),(3,"其他")))
#publish=forms.ChoiceField(choices=Publish.objects.all().values_list("pk","title"))
publish=forms.ModelChoiceField(queryset=Publish.objects.all())
authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())

10.12Django form表单的更多相关文章

  1. C# HTTP系列10 form表单的enctype属性

    系列目录     [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. <form action=&q ...

  2. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  3. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

    天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...

  4. react引用antd的form表单

    引用form是第三方插件ant插件,官网网址:https://ant.design/.用到的antd的版本是@2.0.1.form(https://ant.design/components/form ...

  5. easyUI中的form表单

    首先创建form表单,并在form表单上创建id便于执行表单验证 <form id="form1"action="" method="post& ...

  6. form表单用ge方式提交时ie显示中文参数乱码

    有网友说 通过给form表单添加accept-charset="gb2312"和 onsubmit="document.charset='gb2312'" 但这 ...

  7. form表单那点事儿(上) 基础篇

    form表单那点事儿(上) 基础篇 做为html中最为常见,应用最广泛的标签之一,form常伴随前端左右.了解更深,用的更顺. 目录: 表单属性 表单元素 常识 模拟外观 表单属性 这个表单展示了fo ...

  8. Html form 表单提交前验证

    可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 & ...

  9. [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. Linux 安装 yum

    1.使用RedHat系统不能正常使用yum安装 由于RedHat没有注册,所有不能使用它自身的资源更新, 查看安装源是否安装: # rpm –qa|grep yum 卸载安装源: # rpm –e – ...

  2. 微软BI SSIS 2012 ETL 控件与案例精讲面试 200 问(SSIS 面试题,ETL 面试题)

    开篇介绍 本自测与面试题出自 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程,对于学完本课程的每一课时和阅读完相关辅助 ...

  3. jq 回车提交指定按钮

    $(this).keydown(function (e) { var key = window.event ? e.keyCode : e.which; ") { $("#Main ...

  4. Java Arrays.sort源代码解析

    前提: 当用到scala的sortWith,发现: def sortWith(lt: (A, A) ⇒ Boolean): List[A] // A为列表元素类型 根据指定比较函数lt进行排序,且排序 ...

  5. CentOS7安装chrony替代ntp同步时间

    Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确.它由两个程序组成:chronyd和chronyc:chronyd是一个后台运行的守护进程,用于调整内核中运 ...

  6. Android 实现顶层窗口、浮动窗口(附Demo)

    做过Window程序开发的朋友应该都知道,我们要把程序窗口置顶很简单,只要设置一些窗口属性即可.但是到了Android,你无法简单设置一个属性,就让Android的Activity置顶.因为只要有新的 ...

  7. 【iCore4 双核心板_ARM】例程七:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行错误时,未在 规定时间喂狗(提前或超时),自动复位ARM,本实验通过按键按下,停止喂狗,从而产 生复位. 核心代码: in ...

  8. SQL 逗号分隔将一行拆成多行

    and number<=len(a.KOrderID) and type=)=',')

  9. 3D 特征点概述(1)

    很久没有更新相关内容了,很多朋友过来私信我,但由于时间问题,不能一一为大家解答,本人也不是无所不知的大神,还请各位谅解. 本文主要总结PCL中3D特征点的相关内容,该部分内容在PCL库中都是已经集成的 ...

  10. 关于Unity中的Mesh Collider碰撞器

    原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件,一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件,主角可以放在平面上. 在导入场景后 ...