Django学习-Django数据库模型定义

news/2024/9/25 12:44:40/

文章目录

      • 定义模型
        • 1. 实现方法
        • 2. 模型字段类型
        • 3. 模型字段参数
        • 4. Meta选项属性
        • 5. 模型定义示例

Django对各种数据库提供了很好的支持,包括PostgreSQL、MySQL、SQLite和Oracle,而且为这些数据库提供了统一的API方法,这些API统称为ORM框架。

定义模型

ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。它创建了一个可在编程语言中使用的虚拟对象数据库,在django中,虚拟对象数据库也被称为模型,通过模型实现对目标数据库的读写操作。

1. 实现方法
  • 配置目标数据库,在setting.py中设置数据库配置。
  • 构建虚拟对象数据库,在App的models.py文件中以类的形式定义模型。
  • 通过模型迁移命令在目标数据库中创建相应的数据表。
  • 在其他模块(如视图函数)里使用模型来实现目标数据库的读写操作。
2. 模型字段类型

模型字段类型可在源码目录django\db\models\fields__init__.pyfiles.py文件中找到。
常见常用模型字段示例如下:

字段名称字段介绍
AutoField自增长类型,数据表的字段类型为整数,长度为11位。
CharField字符类型
BooleanField布尔类型
DateField日期(Date)类型
FloatField浮点数类型,数据表的字段类型变成Double类型。
IntegerField整数类型,数据表的字段类型为11位的整数。
TextField长文本类型
FileField字符类型,存储文件路径的字符串
ImageField字符类型,存储图片路径的字符串
3. 模型字段参数

每个模型字段都允许设置参数,这些参数来自父类Field,我们可在源码里查看Field的定义过程django\db\models\fields\__init__.py)并且对模型字段的参数进行分析。
常见常用模型字段参数:

字段参数名称介绍
verbose_name默认为None,在Admin站点管理设置字段的显示名称。
primary_key默认为False,若为True,则将字段设置成主键。
max_length默认为None,设置字段的最大长度。
unique默认为False,若为True,则设置字段的唯一属性。
blank默认为False,若为True,则字段允许为空值,数据库将存储空字符串。
null默认为False,若为True,则字段允许为空值,数据库表现为NULL。
db_index默认为False,若为True,则以此字段来创建数据库索引。
db_column默认为None,设置数据表的列名称,若不设置,则将字段名作为数据表的列名。
default默认为NOT_PROVIDED对象,设置字段的默认值。
validators默认为空列表,设置字段内容的验证函数。

注意:
上述参数适用于所有模型字段,但不同类型的字段回应一些特殊参数,每个字段的特殊参数可以在字段的初始化方法__init__里找到,比如字段DateFieldTimeField的特殊参数auto_now_addauto_now,字段FileFieldImageField的特殊参数upload_to

4. Meta选项属性

Meta 类是用于定义模型元数据的内部类。它允许你指定一些与模型相关的选项和配置,例如排序方式、数据库表名、唯一性约束等。
常见常用模型字段参数:

Meta选项属性介绍
abstract若设为True,则该模型为抽象模型,不会在数据库里创建数据表。
app_label属性值为字符串,将模型设置为指定的项目应用,比如将index的models.py定义的模型A指定到其他App里。
db_table属性值为字符串,设置模型所对应的数据表名称。
get_latest_by属性值为字符串或列表,设置模型数据的排序方式。
managed默认值为True,支持Django命令执行数据迁移;若为False,则不支持数据迁移功能。
proxy若设为True,则为模型创建代理模型,即克隆一个与模型A相同的模型B。
verbose_name属性值为字符串,设置模型直观可读的名称并以复数形式表示。
5. 模型定义示例
class PersonInfo(models.Model):# 自动增长的主键,用于唯一标识每个人员id = models.AutoField(primary_key=True)# 人员姓名,字符串类型,最大长度为20name = models.CharField(max_length=20)# 人员年龄,整数类型age = models.IntegerField()# 入职日期,日期类型hireDate = models.DateField()# 定义对象的字符串表示形式# 返回人员的姓名def __str__(self):return self.name# 元类,用于配置模型的元数据# 设置模型的可读名称class Meta:verbose_name = '人员信息'

综上所述,模型字段、函数__str__Meta选项是模型定义的基本要素,模型字段的类型、函数__str__Meta选项的属性设置需由开发需求而定。在定义模型时,还可以在模型里定义相关函数,如get_absolute_url(),当视图类没有设置属性success_url时,视图类的重定向路由地址将由模型定义的get_absolute_url()提供。

除此之外,Django支持开发者自定义模型字段。


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

相关文章

【密码学】密码学数学基础:双线性配对

又到了枯燥乏味的数学打基础时间,本文不会有太深的讲解,毕竟是我本人对此概念的理解(我的理解不太深,还请大家见谅),如果想系统性的学习此知识,推荐看相关数学教材。免责声明结束后,…

面试经典算法150题系列-O(1)时间插入、删除和获取随机元素

序言:这题可能相对之前的题稍微代码量大一些,但是别急,我们只有理清思路,其实实现起来也挺简单,重在理解,我在实现代码部分特地还增加了一些变量方法的详细解释,担心有人不懂ArrayList集合和哈希…

OpenNebula-6.9.80中文详细部署安装

目录 OpenNebula介绍 主要特点 应用场景 一. 虚拟机准备 二. 下载安装 1. 导入yum源 2. 数据库配置 3. 安装包 4. 设置配置 数据存放位置 端口介绍 命令介绍 OpenNebula介绍 OpenNebula 是一个开源的云计算平台,主要用于创建和管理虚拟化环境。它被设…

【Redis】Redis 数据类型

文章目录 前言1 通用知识1.1 基本全局命令1.2 数据结构和内部编码 2 String2.1 类型介绍2.2 相关命令2.2.1 SET/GET 系列命令2.2.2 INCR/DECR 计数系列命令2.2.3 其他命令2.2.4 命令小结 2.3 内部编码2.4 应用场景2.4.1 缓存功能2.4.2 计数功能2.4.3 共享会话2.4.4 验证码功能 …

【运维项目经历|039】Ceph高性能云存储集群部署与优化

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目录 项目名称 项目背景 项目目标 项目成果…

gin框架 自定义404错误页面,自定义500等服务端异常,业务异常,根据不同异常类型显示不同的异常页面方法 整理

在gin框架中,要显示自定义的异常页面,首先需要通过gin路由对象中的LoadHTMLFiles或者LoadHTMLGlob方法加载自定义的错误页面模板文件, 然后定义符合 gin.HandlerFunc 类型的路由处理函数/方法 ,即只有一个参数(c *ginx.XContext)的…

英特尔凌动® P5300 和 P5700 处理器使企业能够优化现代网络基础架构、安全加速器和存储设备之间的性能和成本平衡。

介绍英特尔凌动 P5300 和 P5700 处理器 英特尔凌动处理器提供核心数和硬件功能各异的多种配置,用于支持不同的边缘用例。基于 10 纳米工艺的先进微架构与一组强大的加速器相结合,带来卓越的每核性能和先进的数据包处理能力。这些平台基于高能效的系统级…

TCL 实业 x TiDB丨从分销转向零售,如何考虑中台建设和数据库选型?

导读 在数字化转型的浪潮中,TCL 实业通过“新方舟”项目构建统一中台,实现了从分销向零售的转型,显著提升了业务精准度和效率。本文根据 InfoQ 记者高玉娴对 TCL 实业企业架构部架构师蔡玖发的采访整理,揭秘了 TCL 实业在这一转型…