Django模型的字段选项

news/2024/9/24 1:39:08/

每一种字段类型都需要指定一些特定的参数。例如,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应用开发实战(视频教学版)》,获出版社和作者授权发布。


http://www.ppmy.cn/news/1429351.html

相关文章

学习笔记-微服务高级(黑马程序员)

Sentinel 测试软件 jmeter 雪崩问题 个微服务往往依赖于多个其它微服务,服务提供者I发生了故障&#xff0c;依赖于当前服务的其它服务随着时间的推移形成级联失败 超时处理 设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息 仓壁模式 限定每个业务能使用的线…

Qt查询mysql表的信息解释

Qt如何查询表中的数据呢&#xff1f; 首先我们需要连接数据库&#xff0c;连接完了&#xff0c;我们进行操作数据库。 连接数据库的代码&#xff1a; bool MainWindow::connectToDatabase(QSqlDatabase &db, const QString &host, const QString &dbName, const…

SpringMVC深解--一起学习吧之架构

SpringMVC的工作原理主要基于请求驱动&#xff0c;它采用了前端控制器模式来进行设计。以下是SpringMVC工作原理的详细解释&#xff1a; 请求接收与分发&#xff1a; 当用户发送一个请求到Web服务器时&#xff0c;这个请求首先会被SpringMVC的前端控制器&#xff08;Dispatche…

五、LoadBalancer负载均衡服务调用

一、Ribbon目前也进入维护模式 1、是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的…

常见现代卷积神经网络(ResNet, DenseNet)(Pytorch 11)

一 批量规范化&#xff08;batch normalization&#xff09; 训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。批量规范化&#xff08;batch normalization&#xff09;是一种流行且有效的技术&#xff0c;可持续加速深层网络的收敛速度。 …

AI大模型量化格式介绍(GPTQ,GGML,GGUF,FP16/INT8/INT4)

在 HuggingFace 上下载模型时&#xff0c;经常会看到模型的名称会带有fp16、GPTQ&#xff0c;GGML等字样&#xff0c;对不熟悉模型量化的同学来说&#xff0c;这些字样可能会让人摸不着头脑&#xff0c;我开始也是一头雾水&#xff0c;后来通过查阅资料&#xff0c;总算有了一些…

Elasticsearch 原理与在直播运营平台的实践

在持续建设基于 ES 的跨域数据聚合服务中发现 ES 的很多特性跟 MySQL 等常用数据库差别较大&#xff0c;本文会分享 ES 的实现原理、在直播平台中的业务选型建议及实践中遇到的问题和思考。 ES 简介与应用场景 Elasticsearch 是一种分布式的、近实时的海量数据存储、检索与分析…

scratch图章画图 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch图章画图 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…