zoukankan      html  css  js  c++  java
  • Django笔记&教程 6-3 使用模型(models)创建表单(form)

    Django 自学笔记兼学习教程第6章第3节——使用模型(models)创建表单(form)
    点击查看教程总目录

    本文参考:Forms for models

    1 - 初步介绍

    很多时候,我们使用的表单,是与模型密切关联的(官方文档称之为紧密映射)。

    比如注册学生账号,其表单与学生的模型字段基本是一一对应的。
    这种情况下,自己一个一个去编辑设置表单的字段比较费事,而且如果模型中有字段修改,表单这边也要去修改。

    在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。
    因此,Django提供了一个辅助类ModelForm,帮助您从Django模型创建表单类。

    举个例子
    比如我们在models.py有这样一个学生类

    from django.db import models
    
    class Student(models.Model):
        gender = [
            ("m", "男"),
            ("f", "女")
        ]
    
        name = models.CharField(max_length=50, verbose_name="姓名")
        gender = models.CharField(max_length=10, choices=gender, default='m', verbose_name="性别")
        birthday = models.DateField(verbose_name="生日")
        email = models.EmailField(verbose_name="邮箱")
        info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字")
    
        grade = models.CharField(max_length=4, verbose_name="年级")
        number = models.CharField(max_length=6, verbose_name="年级子学号")
        password = models.CharField(max_length=30, verbose_name="密码")
    

    我们要给这个学生类建立一个表单,用于在注册页面提交注册信息。
    那么forms.py代码如下

    from django import forms
    from .models import Student
    
    class StuRegisterForm(forms.ModelForm):
    
        class Meta:
            model = Student
            fields = ('grade',
                      'name',
                      'password',
                      'confirm_password',
                      'gender',
                      'birthday',
                      'email',
                      'info')
    

    其中Meta是元数据类,用于去编辑设置一些更深层次的设置。
    要使用一个模型来创建表单,则在Meta元数据类中指定对应的model属性

    fields属性见本文第二部分

    2 - 选择字段

    对于和模型紧密映射的表单,有时我们不希望有些字段能够被用户编辑(比如一些需要后台按照逻辑去生成的字段)
    这个时候我们可以使用:

    1. fields属性,设置哪些字段是可以让用户进行编辑的
    2. exclude属性,设置哪些字段是不让用户进行编辑的(用户在表单中也看不到这个字段)

    上面两个属性一般使用列表(元组也可以),包含其需要指定的字段名。

    fields属性可设置为特殊值'all',以指示应该使用模型中的所有字段

    补充:如果你在模型字段上设置了edititable=False,那么通过ModelForm从模型创建的任何表单都不会包含该字段。

  • 相关阅读:
    ADF中遍历VO中的行数据(Iterator)
    程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
    ArcGIS api for javascript——鼠标悬停时显示信息窗口
    ArcGIS api for javascript——查询,然后单击显示信息窗口
    ArcGIS api for javascript——查询,立刻打开信息窗口
    ArcGIS api for javascript——显示多个查询结果
    ArcGIS api for javascript——用图表显示查询结果
    ArcGIS api for javascript——查询没有地图的数据
    ArcGIS api for javascript——用第二个服务的范围设置地图范围
    ArcGIS api for javascript——显示地图属性
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285595.html
Copyright © 2011-2022 走看看