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

文章目录

      • 定义模型
        • [1. 实现方法](#1. 实现方法)
        • [2. 模型字段类型](#2. 模型字段类型)
        • [3. 模型字段参数](#3. 模型字段参数)
        • [4. Meta选项属性](#4. Meta选项属性)
        • [5. 模型定义示例](#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. 模型定义示例
python 复制代码
class PersonInfo(models.Model):
    # 自动增长的主键,用于唯一标识每个人员
    id = models.AutoField(primary_key=True)
    # 人员姓名,字符串类型,最大长度为20
    name = 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支持开发者自定义模型字段。

相关推荐
Alidme27 分钟前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
小王努力学编程28 分钟前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
ZxsLoves40 分钟前
【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
学习·fpga开发
RainbowSea1 小时前
9-1. MySQL 性能分析工具的使用——last\_query\_cost,慢查询日志
数据库·sql·mysql
程序媛徐师姐1 小时前
Python基于Django的酒店推荐系统【附源码】
python·django·酒店·酒店推荐·python django·酒店推荐系统·python酒店推荐系统
Sui_Network1 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
明阳mark1 小时前
Ansible 学习笔记
笔记·学习·ansible
~kiss~1 小时前
python的thrift2pyi学习
windows·python·学习
ZKNOW甄知科技1 小时前
IT服务运营管理体系的常用方法论与实践指南(上)
大数据·数据库·人工智能
Evaporator Core2 小时前
MATLAB学习之旅:数据建模与仿真应用
开发语言·学习·matlab