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从模型创建的任何表单都不会包含该字段。

  • 相关阅读:
    软件工程课程作业(四)--返回一个整数数组中最大子数组的和
    构建之法阅读笔记02
    第三周学习进度
    Delphi 之 编辑框控件(TEdit)
    Delphi 之 标签组件(TLabel组件)
    Delphi 之 第九课 Windows编程
    Delphi 之 第八课 动态数组
    VB API 之 第六课 字体应用三
    VB API 之 第五课 字体之其他函数介绍
    Delphi 之 第七课 字符串操作
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285595.html
Copyright © 2011-2022 走看看