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
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- 移动电源、3G路由拆机
这款电源4400mAh,淘宝也就八十元左右,可以作为无线路由使用,可以插3G网卡,总的来说还算不错,关键是外观精美,网上一堆和华美A100那样的,可惜实在太丑,这款外观虽然漂亮,但是和一百多的相比不支 ...
- 【Linux】Cent OS 虚拟机开机自启动配置
一次断电,导致实体机关机了,虚拟机也连不上去,只好手动来起来. 我想增加一下自启动,让硬件开机的时候,自动启动虚拟机: 其实是有办法的,尝试了一下,也成功了,这里简单标记下. virsh autost ...
- angularjs 1.x lazyloading
https://oclazyload.readme.io/docs 安装好后直接使用 var myApp = angular.module("MyApp", ["oc.l ...
- 部分Linux时区改为东八区的方法
直接上命令 CentOS: timedatectl set-timezone Asia/Shanghai timedatectl status date Alphine: apk add tzdata ...
- Emacs 设置C++代码风格
;; C++代码风格设置 (defconst cobbcpp '("linux" ; this is inheritance from the linux style (c-bas ...
- 基于Centos搭建 Firekylin 个人网站
系统要求: CentOS 7.2 64 位操作系统 安装 Node.js 使用 yum 命令安装 Node.js curl --silent --location https://rpm.nodeso ...
- 学习笔记 07 --- JUC集合
学习笔记 07 --- JUC集合 在讲JUC集合之前我们先总结一下Java的集合框架,主要包含Collection集合和Map类.Collection集合又能够划分为LIst和Set. 1. Lis ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第三章 菜单
第3章 菜单 在许多不同类型的应用中,菜单通常是一种用户界面组件.为了提供给用户提供熟悉且一致的体验,你需要使用菜单API来展示用户动作和你Activity中的其他选项. 从安卓3.0系统(API l ...
- 虚拟机centos 7联网设置之NAT方式
第一步在设置虚拟机的连接模式为NAT,虚拟机是VMware12的版本 第二步在PC主机上设置网络共享 第三步将虚拟机网卡开启,默认关闭状态,开启网卡 ip link set ens32 up (ens ...
- idea 添加项目到svn
version control 改变项目为svn管理 如图 分享 share dic 添加新地址 share 剩下的 就是设置忽略目录 提交