Django模型的字段选项

每一种字段类型都需要指定一些特定的参数。例如,CharField(及其子类)需要接收一个max_length参数,用以指定数据库存储VARCHAR数据时的字节数。

一些可选的参数是通用的,可以用于任何字段类型,下面具体介绍一些会经常用到的通用参数。

1. null(类型:Field.null)

null的默认值为False,如果设置为True,则当该字段为空时,Django模型会将数据库中的该字段设置为NULL。

注意:避免在基于字符串的字段(如CharField和TextField)上使用null类型,Django模型在使用惯例上是使用空字符串而不是NULL。

2. blank(类型:Field.blank)

blank的默认值为False,如果设置为True,则该字段允许为空。

blank类型与null类型是有区别的。blank类型主要用于表单验证,如果某个表单域设为“blank=True”,则验证时会允许该域为空值;如果某个表单域设为“blank=False”,则验证时该域是必须填写的。

3. default(类型:Field.default)

表示字段的默认值。该字段值可以是一个值或者是一个可调用的对象,如果是一个可调用的对象,则每次实例化模型时都会调用该对象。

default类型的代码示例如下:

【代码3-4】

01  def contact_default():
02      return {"email": "email@example.com"}
03  
04  contact_info = JSONField(
05                  "ContactInfo",
06                  default=contact_default)

【代码分析】

在第01、02行代码中定义了一个contact_default()方法,返回了一个email对象。

在第04~06行代码中定义了一个JSON域变量contact_info,其default值引用了contact_default()方法返回的email对象。

4. choices(类型:Field.choices)

choices是一个用来选择值的二维元组。其中,第一个值是实际存储的值,第二个值用来进行选择。

choices类型最好是在Django模型中使用。下面是官方文档给出的代码示例,这个代码示例实现了一个大学生年级类。

【代码3-5】

01  from django.db import models
02  
03  class CollegeStudent(models.Model):
04      FRESHMAN = 'FR'
05      SOPHOMORE = 'SO'
06      JUNIOR = 'JR'
07      SENIOR = 'SR'
08      YEAR_IN_COLLEGE_CHOICES = [
09          (FRESHMAN, 'Freshman'),
10          (SOPHOMORE, 'Sophomore'),
11          (JUNIOR, 'Junior'),
12          (SENIOR, 'Senior'),
13      ]
14      year_in_college = models.CharField(
15          max_length=2,
16          choices=YEAR_IN_COLLEGE_CHOICES,
17          default=FRESHMAN,
18      )
19  
20      def is_upperclass(self):
21          return self.year_in_college in (self.JUNIOR, self.SENIOR)

【代码分析】

在第03行代码中定义了一个大学生类CollegeStudent。

在第04~07行代码中定义了一组字符串变量,即FRESHMAN、SOPHOMORE、JUNIOR和SENIOR,分别用于表示大学生四个年级的名称。

在第08~13行代码中定义了一个choices类型的变量YEAR_IN_COLLEGE_CHOICES,其中包含了4个元组,使用了第04~07行代码中定义的变量。

在第14~18行代码中定义了一个字符型域变量year_in_college,将choices值定义为变量YEAR_IN_COLLEGE_CHOICES,默认值为FRESHMAN。

在第20~21行代码中定义了一个方法is_upperclass(),用于返回大学生中的高年级元组。

5. unique(类型:Field.unique)

如果unique的值设置为True,则这个字段必须在整个表中保持值唯一。unique类型还定义了一组关于日期和时间的子类型,例如unique_for_date(唯一日期)、unique_for_month(唯一月份)、unique_for_year(唯一年份)。

6. editable(类型:Field.editable)

editable默认值为True(真),如果值为False(假),则在Admin模式下字段将不能编辑。

7. primary_key(类型:Field.primary_key)

primary_key用于设置主键,一个字段只能设置一个主键。如果没有设置主键,则Django框架在创建表时会自动加上。如果primary_key值设置为True,则将该字段设置为该模型的主键,示例   如下:

id = meta.AutoField('ID', primary_key=True)

8. help_text(类型:Field.help_text)

help_text是额外的“帮助”文本,随表单控件一同显示。示例如下:

help_text="Please use the following format: <em>YYYY-MM-DD</em>."

即便某个字段未用于表单,该类型对于生成文档也是很有用的。

9. verbose_name(类型:Field.verbose_name)

verbose_name用于设置admin模式中字段的显示名称。

10. validators(类型:Field.validators)

validators用于设置某个域的有效性检查列表。

11. db_column(类型:Field.db_column)

db_column用于为某个域指定数据库列表的名称;如果未指定,则使用该域的名称。

12. db_index(类型:Field.db_index)

如果db_index值为True,则创建数据库索引。

13. db_tablespace(类型:Field.db_tablespace)

db_tablespace用于为某个域的索引指定数据库表空间的名称。

本文节选自《Django 5企业级Web应用开发实战(视频教学版)》,获出版社和作者授权发布。

相关推荐

  1. 【查漏补缺】Django模型字段类型及其应用

    2024-04-25 10:42:03       53 阅读
  2. Django模型使用

    2024-04-25 10:42:03       27 阅读
  3. DjangoAuth模块

    2024-04-25 10:42:03       57 阅读
  4. Django模板语言

    2024-04-25 10:42:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 10:42:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 10:42:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 10:42:03       87 阅读
  4. Python语言-面向对象

    2024-04-25 10:42:03       96 阅读

热门阅读

  1. 【产品经理修炼之道】- 政务G端产品建设指南

    2024-04-25 10:42:03       40 阅读
  2. C++认知

    C++认知

    2024-04-25 10:42:03      29 阅读
  3. 【go从入门到精通】反射的限制

    2024-04-25 10:42:03       40 阅读
  4. Day2: 5道C++ 面向对象高频题整理

    2024-04-25 10:42:03       39 阅读
  5. Linux常用命令

    2024-04-25 10:42:03       38 阅读
  6. Python搭建http下载服务器

    2024-04-25 10:42:03       37 阅读
  7. 使用Python实现批量删除MYSQL数据库的全部外键

    2024-04-25 10:42:03       30 阅读
  8. Node.js中fs模块实现配置文件的读写

    2024-04-25 10:42:03       36 阅读
  9. 微前端通信机制及其实现

    2024-04-25 10:42:03       30 阅读
  10. css 动画基础知识和案例

    2024-04-25 10:42:03       33 阅读
  11. Mysql 的char 和varchar的的区别

    2024-04-25 10:42:03       33 阅读
  12. CSS基础——2.CSS选择器

    2024-04-25 10:42:03       32 阅读