Django模型的字段与Meta类元选项

本文最后更新于:2 年前

模型中的字段

模型中的字段分为字段类型关系字段,字段类型用于定义字段的数据类型;关系字段用于定义模型之间的关联关系。

字段类型

字段类型用于定义字段的数据类型。

  • AutoField

    用于定义可自增的整型字段。如果不指定,一个主键字段将自动添加到模型中。

  • BooleanField

    用于定义布尔类型的字段,值为True或False。此字段的默认表单控制是 CheckboxInput。

  • CharField

    用于定义字符串类型的字段,通过必选参数max_length设置最大字符个数。默认的表单样式是 TextInput。

  • TextField

    用于定义大文本字段,一般超过4000使用,在HTML页面中表现为textarea标签,如果为此字段的max_length参数设置值,那么HTML页面中textarea标签输入的字符数量将会受到限制。

  • IntegerField

    用于定义整型字段,取值范围为-2147483648~2147483647。

  • FloatField

    用于定义浮点数.

  • FileField

    用于上传文件的字段,该字段不能作为主键,不支持primary_key参数。

  • ImageField

    用于上传图片类型文件,继承自FileField类,包含FileField字段的全部属性和方法。

  • DateField

    用于定义格式为 YYYY-mm-dd 的日期字段,有两个常用参数 auto_now 和 auto_now_add,其中 auto_now 表示“最后一次修改”的时间戳,auto_now_add 表示“当前对象第一次被创建”的时间戳。参 数auto_now_add 和 auto_now 是相互排斥的,组合将会发生错误。

  • TimeField

    用于定义格式为 HH:MM[:ss[.uuuuuu]] 的时间字段,参数同 DateField。

  • DateTimeField

    用于定义格式为 YYYY-mm-dd HH:MM[:ss[.uuuuuu]] 的日期时间字段,参数同 DateField。

关系字段

关系字段用于定义模型之间的关联关系。

关系型数据库不仅定义了数据的组织形式,也定义了表间的关系,因此Django中的模型除了要定义表示数据类型的字段,还需要定义表间关系。数据库表之间的关系分为一对一一对多多对多三种,Django使用 ForeignKeyOneToOneFieldManyToManyField 关系字段类来定义这三种关系。

一对一

一对一关系是指关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。比如每个人都有唯一的身份证编号。

学生信息表与学生学好信息表是一对一关系

一对多

一对多关系是该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关。比如班级表与 学生表,一个班级对应多个学生。

班级表与学生表是一对多关系

多对多

多对多关系是该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。如老师和班级的关系。

学生信息表与选修课程信息表是多对多关系

字段命名规则

  1. 不能是Python的保留关键字,如 pass 是关键字,不能做字段名。。
  2. 名称不能包含多个连续的下划线,否则会影响 Django 的查询语句的语法。如 “foo__bar” 中就有两个连续下划线,不能做字段名。

字段通用参数

字段的一些参数为该字段的特有参数,但还有一些参数为多个字段的通用参数。

参数 说明
null 默认值是False,若为True,表示字段可以为空
default 设置字段的默认值,默认值不能是模型实例、列表、集合等可变对象
blank 如果为True,则该字段允许为空白,默认值是False
choice 设置字段的选项,取值为二维元组或二维列表
Primary_key 默认值是False,若为True,则字段会成为模型的主键字段,一般作为AutoField的选项使用
unique 默认值是False,如果为True,表示字段在表中必须唯一
db_column 用于设置该字段在数据库表中的列名。如果未指定,则使用字段名作为列名
db_index 默认值是False,若值为True,则在表中会为此字段创建索引

Meta类元选项

在模型类中定义类Meta用于设置元选项,定义一些 Django 模型类的行为特性。

通过在模型类中添加内部类Meta的方式可以定义模型的元属性。如设置数据表的一些属性:排序字段、数据表名、字段单复数等等。

  • abstract:值为 True 时表示这个模型将是一个 抽象基类。

  • db_table:定义该Model在数据库中的表名称。

  • ordering:排序。

  • verbose_name:对象的可读名称。

  • verbose_name_plural:对象的复数名称,如果没有给出,Django 将使用 verbose_name+ “s”。

更多元选项见『官方文档』。