10.12Django form表单
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表单的更多相关文章
- C# HTTP系列10 form表单的enctype属性
系列目录 [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. <form action=&q ...
- form表单验证-Javascript
Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- react引用antd的form表单
引用form是第三方插件ant插件,官网网址:https://ant.design/.用到的antd的版本是@2.0.1.form(https://ant.design/components/form ...
- easyUI中的form表单
首先创建form表单,并在form表单上创建id便于执行表单验证 <form id="form1"action="" method="post& ...
- form表单用ge方式提交时ie显示中文参数乱码
有网友说 通过给form表单添加accept-charset="gb2312"和 onsubmit="document.charset='gb2312'" 但这 ...
- form表单那点事儿(上) 基础篇
form表单那点事儿(上) 基础篇 做为html中最为常见,应用最广泛的标签之一,form常伴随前端左右.了解更深,用的更顺. 目录: 表单属性 表单元素 常识 模拟外观 表单属性 这个表单展示了fo ...
- Html form 表单提交前验证
可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 & ...
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- C# Queue 和Stack的实现
Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出. 这里我主要关注其实现原理. queue的实现如下: public class Queue<T> : IEnum ...
- centos安装EPEL repo
What is EPEL EPEL (Extra Packages for Enterprise Linux) is open source and free community based repo ...
- CSS 布局整理
1.css垂直水平居中 效果: HTML代码: <div id="container"> <div id="center-div">&l ...
- 权威公布:彻底搞清楚哪些笔记本和台式机主板能够支持42mm SATA M.2 NGFF(2242)接口的固态硬盘!!!
在京东,天猫上搜寻半天.致电联想客服以及各个固态盘的店小二.都搞不清楚兼容性问题.并且联想客服的回答明显错误,官网描写叙述也错误,客服project师也含糊不清说:要拆机试一试才知道是否兼容. 我就不 ...
- ASP.NET Core入门系列教程
微软把这个新的框架叫:Razor Pages,以下文中我们将频繁提及—Razor Pages. 项目目录结构 wwwroot静态资源文件夹首先,Razor Pages项目中多了一个wwwroot的文件 ...
- 添加JavaDoc
使用javadoc比较容易生成文档,命令如下: javadoc -d doc -sourcepath src/main/java/ -subpackages com -encoding UTF-8 - ...
- CentOS6.9下安装python notebook
操作系统:CentOS6.9_x64 python版本 : python2.7.13 添加低权限新用户: useradd mike su mike 使用virtualenv安装python2.7环境 ...
- Linux-文件描述符的本质及与文件指针的区别
文章参考:文件描述符的本质.文件描述符和文件指针的区别.文件描述符fd和文件指针flip的理解 推荐:task_struct 和文件系统的关系 系统中文件相关表 右侧的表称为i节点表,在整个系统中只有 ...
- cProfile——Python性能分析工具
Python自带了几个性能分析的模块:profile.cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的.本文介绍cProfile. 例子 import t ...
- C#面试题(转载)
原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. .NET和C#有什么区 ...