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
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- windows多线程--原子操作
推荐参考博客:秒杀多线程第三篇 原子操作 Interlocked系列函数 原子操作 VS 非原子操作 原子操作就是不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切 ...
- 如何寻找linux下相关软件
当在linux下运行程序遇到找不到库的时候可以使用yum whatprovides 来找到到需要安装的包. 例如:yum whatprovides libz.so.1 然后安装找到的包 yum in ...
- 启用phpstorm代码提示功能
参考:http://www.dawnfly.cn/article-1-331.html mac下实际上将省电禁用即可
- JAVA 自定义注解在自动化测试中的使用
在UI自动化测试中,相信很多人都喜欢用所谓的PO模式,其中的P,也就是page的意思,于是乎,在脚本里,或者在其它的page里,会要new很多的page对象,这样很麻烦,前面我们也讲到了注解的使用,很 ...
- 检查死锁与Locked ownable synchronizers(转载)
通过jstack可快速检查线程的死锁信息,用法如下: # 获取JVM ID(JAVA 进程ID),通过参数lv可以获取更详细的JAVA方法调用信息 jps -lv # 得到JVM ID后,执行jsta ...
- 4.翻译系列:EF 6 Code-First默认约定(EF 6 Code-First系列)
原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx EF 6 Code-First系列 ...
- Ethereum Dapp Tutorial — Part 1
在上一篇文章中,通过和传统的 web程序相比较解释了以太坊平台的结构.作为一个开发者,学习新技术的最好的方式就是构建一个玩具程序. 在这篇文章中我们将会构建一个简单的“hello word”程序,这个 ...
- 3D建模软件的选择(UG,Solidworks,ProE)
转自:3D建模软件的选择(UG,Solidworks,ProE) 自述 咱是一个码农,和web.软件.控制台打交道太多了,很想玩玩炫的东西,于是学了点点PS,结果发现完全没有美术细胞TT.最近有碰到对 ...
- [svc]find+xargs/exec重命名文件后缀&文件操作工具小结
30天内的文件打包 find ./test_log -type f -mtime -30|xargs tar -cvf test_log.tar.gz awk运算-解决企业统计pv/ip问题 find ...
- Ubuntu图形界面环境下启动应该程序:
1.先说下Ubuntu14.04系统开机紫框的问题: Grub theme:黑色屏幕出现紫色边框 There's a minor typo on the grub theme which produc ...