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())

原文地址:https://www.cnblogs.com/zhen1996/p/9780374.html

时间: 2024-10-11 03:15:51

10.12Django form表单的相关文章

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

做为html中最为常见,应用最广泛的标签之一,form常伴随前端左右.了解更深,用的更顺. 目录: 表单属性 表单元素 常识 模拟外观 表单属性 这个表单展示了form表单常用的属性 属性名 属性值 描述 action 一个url地址 指定表单提交到的地址 method `GET` , `POST` 表单将以此种方法提交到服务器 target `_self` 当前页面 `_blank` 每次在新窗口打开 `blank` 每次在同一个新窗口打开 `_parent` 父级frame `_top` 顶

通过button将form表单的数据提交到action层

form表单中不需要写action的路径,需要给form表单一个唯一的id,将你要提交的信息的表单中的标签name="action中的javabean对象.javabean属性".给button按钮添加一个onclick()点击事件,并实现该点击事件,在该onclick()方法中通过ajax将form表单中的数据提交给action层 JSP页面中的代码: 1 <form id="handleform"> 2 <!-- 根据学生id修改学生信息 --

HTML table、form表单标签的介绍

本篇主要介绍 table.form标签以及表单提交方式. 目录 1. <table> 标签:在HTML 中定义表格布局. 2. <form> 标签:用于创建 HTML 表单. 3. 表单提交方式:介绍get.post方法. 1. <table> 标签 1.1 说明 在HTML 中定义表格布局. 1.2格式 <table> <caption></caption> <tr> <th></th></

serialize可以获取form表单里面的数值

serialize属性 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script src="../jquery-1.12.2.js"></script> 7 </head> 8 <

微信小程序组件解读和分析:九、form表单

form表单组件说明: 表单,将组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/> <picker/> 提交. 当点击 <form/> 表单中 formType 为 submit 的<button/> 组件时,会将表单组件中的 value 值进行提交,需要在表单组件中加上 name 来作为 key. form表单组件用法: 重置:<butt

简约的form表单校验插件

前言 网上有好多form表单校验插件,包括jquery的表单检验插件,这些中好多插件功能很齐全强大,提示方式很酷,很美观好看.本想拿来用,但是发现几个问题: 1.使用不方便.校验规则繁多,调用校验函数难记忆. 2.提示方式固定.一般插件给出固定的几种提示方式,但是实际中,不同系统都有自己的页面风格样式,有自己的提示方式,插件自带的一般用不上. 因此,我最终没有采用这些插件,以免用后出现难以修改或实现的情况. 如果一种校验插件能避免以上两个问题最好了,方便使用,提示方式自定义 ,所以自己做了一个简

原生js实现form表单序列化

大家都知道在jquery中有相应的表单序列化的方法: 1.serialize()方法 格式:var data = $("form").serialize(); 功能:将表单内容序列化成一个字符串. 这样在ajax提交表单数据时,就不用一一列举出每一个参数.只需将data参数设置为 $("form").serialize() 即可. 2.serializeArray()方法 格式:var jsonData = $("form").serialize

form表单按enter键自动提交的问题

废话不多说.直接上代码. 1:form表单按enter键自动提交的情况 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="Generator" content="EditPlus®"> 6 <meta name="Author&quo

js阻止form表单重复提交

防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单处理完毕清空或者修改session中的token. 在js中处理简单易懂,同时能解决我现在所做的项目中的问题,目前暂用js处理,后期如有需要再研究token机制.代码如下: 1.表单提交后禁用提交按钮(在本项目中表单提交完成后,如果处理成功都把form表单关掉了) 1 /** 2 * form表单格