• Django中的Form表单


    Django中已经定义好了form类,可以很容易的使用Django生成一个表单。

    一、利用Django生成一个表单:

    1、在应用下创建一个forms文件,用于存放form表单。然后在forms中实例华一个表单。

    forms.py

    from django import forms
    
    class BookForm(forms.Form):
        name=forms.CharField(max_length=10)
        publisher_id=forms.IntegerField(widget=forms.Select)   #选择
        publish_date=forms.DateField()

    2、定义视图函数,将该表单传递给前端页面

    views.py

    from test1 import forms
    
    def index(request):
        form=forms.BookForm()
        return render(request,'index.html',{'book_form':form})

    3、定义前端生成表单的页面

    index.html

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        {{ book_form }}
    
    </body>
    </html>

    4、url的配置

    urls.py

    urlpatterns = [
        url(r'^$',views.index)
    ]

    经过以上几步的配置,就由Django生成了一个简单表单,效果如下图:

    二、填充数据

    1、定义视图处理函数

    views.py

    def index(request):
        form=forms.BookForm()
        if request.method=='POST':
            form=forms.BookForm(request.POST)     #表单提交的数据
            if form.is_valid():                   #验证提交的数据是否合法
                form_data=form.cleaned_data       #form.cleaned_data  为验证通过的数据
                form_data['publisher_id']=request.POST.get('publisher_id')   #从数据去里取publisher_id
                book_obj=models.Book(**form_data) #将整个表单获取的数据传递给models.Book对象,
                book_obj.save()                      #将获取的数据插入数据库
            else:
                print form.errors                  #如果验证不通过,输出错误
        publisher_list=models.Publisher.objects.all()  #生成出版社列表
        return render(request,'index.html',{'book_form':form,'publishers':publisher_list})  #将表单提交的数据和出版社列表返回前端

    2、定义前端html页面

    index.html 

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="" method="post">       #Django中的Form不带form标签,自定义一个form标签
            {{ book_form }}
            {{ book_form.publisher_id}}
            <select name="publisher_id">
                {% for publisher in publishers %}
                    <option value={{ publisher.id }}>{{ publisher.name }}</option>
                {% endfor %}
            </select>
        <input type="submit" value="创建图书">
        </form>
    </body>
    </html>

     三、ModelForm的使用

    我们知道,在创建数据库的时候,在models.py文件中就定义了各个字段的类型已经限制条件。而此处的forms.py文件中又定义了一遍,这样使用起来很不方便。为了不重复定义,直接引用models.py中各个字段的定义,需要使用ModelForm类。

    forms.py可以这样定义

    from test1 import models
    
    class BookModelForm(forms.ModelForm):
        class Meta:
            model=models.Book
            exclude=()     #关联表中所有的字段
            widgets={
                'name':forms.TextInput(attrs={'class':'form-control'}), #定义样式
            }

    views.py

    def book_modelform(request):
        form=forms.BookModelForm
        if request.method=='POST':
            form=forms.BookModelForm(request.POST)
            if form.is_valid():
                form.save()
            else:
                print form.errors
        return render(request,'index1.html',{'book_modelform':form})

    index1.html

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="" method="post"> {% csrf_token %}
            {{ book_modelform }}
        <input type="submit" value="创建图书">
        </form>
    </body>
    </html>

    ...

  • 相关阅读:
    WPF 中英文切换
    System.Data.Entity.Core.ProviderIncompatibleException:0x89c50107
    WinForm使用原生gdi+绘制自定义曲线图、折线图
    C#使用EPPlus读写excel
    ICSharpCode.SharpZipLib C# 压缩文件夹SharpZipHelper
    C# XSLT 转换word 生成word
    代码生成器集合
    优秀的个人博客
    面试经典复习资料
    图解算法
  • 原文地址:https://www.cnblogs.com/ahaii/p/5725662.html
Copyright © 2020-2023  润新知