阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

定义数据库模型

410次阅读
没有评论

共计 3371 个字符,预计需要花费 9 分钟才能阅读完成。

一、属性说明

  • 说明

    • django 根据属性的类型确定以下信息

      当前选择的数据库支持字段的类型

      渲染管理表单时使用的默认 html 控件

      在管理站点最低限度的验证

    • 自增长主键

      django 会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则 django 不会再生成默认的主键列

    • 属性命名限制

      不能是 python 的保留关键字

      由于 django 的查询方式,不允许使用连续的下划线

    • 定义属性时,需要字段类型,字段类型被定义在 django.db.models.fields 目录下,为了方便使用,被导入到 django.db.models 中

    • 逻辑删除

      对于重要数据都做逻辑删除,不做物理删除,实现方法是定义 isDelete 属性,类型为 BooleanField,默认值为 False

  • 字段类型

    字段名称 字段说明 参数
    AutoField 一个根据实际 ID 自动增长的 Integer field 通常不指定(自动创建主键 id 字段) primary_key=True
    CharField varchar 类型字段 max_length 存储值的最大长度
    TextField longtext 类型 长文本
    IntegerField int 类型字段 存储整形 -2147483648 ~ 2147483647
    SmallIntegerField 小整数 -32768 ~ 32767
    DecimailField 存储浮点形 更加精准(存钱) max_digits=None 位数长度
    decimal_places=None 小数的位数
    FloatField 浮点类型
    BooleanField 存储 Bool 值 True/False
    NullBolleanField 存储 null/True/False
    DateField date 字段 auto_now = False 如果对数据进行修改则会自动保存修改的时间
    auto_now_add=False 会自动添加第一次保存的时间
    俩个参数不能同时设置
    TimeField time 字段 参数同上
    DateTimeField datetimefield 参数同上
    FileField 单个上传文件的字段 upload_to =“”
    上传文件的保存路径 storage = None
    存储组件,默认
    ImageField 继承了 FileField 的所有属性和方法,但对上传的对象进行校验,确保它是个有效的 image upload_to =“”
    上传文件的保存路径
    storage = None
    存储组件,默认
  • 字段选项

    通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定

    选项 说明
    null 如果设置为 True 则当前字段值可以为 null
    blank 如果设置为 True 则当前字段可以为空(什么值都没有)值能设置在字符串类型字段
    db_column 设置字段名称 不设置 字段名称默认为属性名(db_column=“test”)
    可选参数 参数说明
    db_index 常规索引(db_index=True)
    unique 唯一索引(unique=True)
    primary_key 主键索引(primary_key=True)
    default 数据库中字段的默认值
    verbose_name Admin 中显示的字段名称
    class User(models.Model): # 用户名 最大长度 20 username = models.CharField(max_length=20) # 用户密码 最大长度 64 password = models.CharField(max_length=64) # 性别 默认为 True sex = models.BooleanField(default=True) # 年龄 默认 20 岁 age = models.IntegerField(default=20) # 个人简介 最大长度 100 默认为 info info = models.CharField(max_length=100,default='info') # 头像 最大长度为 60 默认为 default.jpg icon = models.CharField(max_length=60,default='default.jpg') # 是否删除 默认不删除 isDelete = models.BooleanField(default=False)
  • 关系

    • ForeignKey 一对多,将字段定义在多的端中
    • ManyToManyField 多对多,将字段定义在两端中
    • OneToOneField 一对一,将字段定义在任意一端中

二、元选项

  • 作用

    在模型类中定义 Meta 类用于设置元信息

  • 示例

    class Meta: db_table = "user" ordering = ["-age", "name"]
  • 说明

    • db_table

      定义数据表名称,一般使用模型类名小写字母且复数

    • ordering

      ordering = [“age”] 升序

      ordering = [“-age”] 降序

      ordering = [“-age”,“name”] 第一个条件相同的数据根据第二个条件排序

      注意:排序会增加数据库的负担

三、objects

  • 概念

    • 是 Manager 类型的对象,用于与数据库进行交互的
    • 当定义模型时没有指定管理器对象,则 Django 会为模型类提供一个名为 objects 的管理器
  • 问题

    如果用户被删除(逻辑删除),按照目前的查询会将所有用户获取到,很显然不符合逻辑

  • 自定义管理器对象

    class User(models.Model): # 自定义管理器对象, objects = models.Manager() username = models.CharField(max_length=20) password = models.CharField(max_length=64) sex = models.BooleanField(default=True) age = models.IntegerField(default=20) info = models.CharField(max_length=100,default='info') icon = models.CharField(max_length=60,default='default.jpg') isDelete = models.BooleanField(default=False) createTime = models.DateTimeField(auto_now_add=True) class Meta: db_table = "users" ordering = ["-age"]

    注意:如果自定义了管理对象,Django 就不会添加 objects,但是这两个管理器对象没有任何区别

  • 自定义管理器类

    • 原理

      定义 Manager 类的子类,实现数据的逻辑删除。重写 get_queryset()方法,父类中的该方法用户获取所有的数据

    • 实现

      class MyAppManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(isDelete=False) class User(models.Model): # 自定义管理器对象, objects = MyAppManager() username = models.CharField(max_length=20) password = models.CharField(max_length=64) sex = models.BooleanField(default=True) age = models.IntegerField(default=20) info = models.CharField(max_length=100,default='info') icon = models.CharField(max_length=60,default='default.jpg') isDelete = models.BooleanField(default=False) createTime = models.DateTimeField(auto_now_add=True) class Meta: db_table = "users"
      users = User.objects.all()

四、生成数据表

  • 生成迁移文件

    python manage.py makemigrations
  • 执行迁移

    python manage.py migrate

    使用迁移文件在数据库中生成对应的数据表此刻数据库中已经存在我们的用户表

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计3371字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7802208
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...