Django-Models

  • Django 对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库。

如需了解更多,请访问: https://www.emperinter.info/2022/05/29/django-models/

ORM

  • 概述
    • 对象-映射-模型
  • 任务
    • 根据对象的类型生成表结构
    • 将对象、列表的操作转换为sql语句
    • 将SQL语句查询的结果转换为对象、列表
  • 优点
    • 极大的减轻了开发人员的工作量,不需要面对因数据库的变更而修改代码

流程

配置数据库

  • __init__.py文件中添加选定的数据库Package。
import pymysql  
pymysql.version_info = (2,0,3,"final",0)  
pymysql.install_as_MySQLdb()
  • settings.py文件中修改数据库配置。
DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'sunck', # 数据库名  
        'USER': 'sunk', # 数据库用户名  
        'PASSWORD': 'sunk', # 数据库密码  
        'HOST': 'localhost', # 数据库主机  
        'PORT': '3306', # 数据库端口  
    }  
}

在models.py 添加模型类

  • 一个模型类都在数据库中对应一张表

定义模型

模型、属性、表、字段间的关系

  • 一个模型类在数据库中对应一张表
  • 模型类中定义的属性,对应模型对照表中的字段

定义属性

概述
  • Django根据属性的类型确定以下信息
    • 当前选择的数据库支持字段的类型
    • 渲染管理表单时使用的默认html控件
    • 在管理站点最低限度的验证
  • Django会为表增加自动增加的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则Django不会再生成默认的主键列。
  • 属性命名限制
    • 不能是Python的保留关键字(遵循标识符命名规则)
    • 由于Django的查询方式,不允许使用连续的下划线
  • 定义属性时,需要字段类型,字段类型被定义再django.db.modles.fields目录下,为了方便使用,被导入到django.db.modles
  • 使用方式:
    • 导入from django.db import models
    • 通过modles.Field创建字段类型的对象,赋值给属性
逻辑删除
  • 对于重要数据都做逻辑删除 ,不能做物理删除,实现方法是定义isDelete属性,类型为BooleanField,默认值为False
字段类型
字段类型说明
AutoField一个根据实际ID自动增长的IntergerField,通常不指定,如果不指定一个主键字段将自动添加到模型中
CharField(max_length=字符长度)字符串,默认的表单样式是TextInput
TextField大文本字段,一般超过4000字节使用,默认的表单控件是textArea
IntegerField整数
DecimalFiled(max_digits=None,decimal_places=None)使用Python的Decimal实例表示的十进制浮点数,max_digits表示位数总数,decimal_places表示小数点后的数字位数。[[精确的浮点运算-Decimal]]
FloatField用Python的Float实例来表示的浮点数
BooleanFieldtrue/false字段,此字段的默认表单控制是CheckboxInput
NullBolleanField支持null、true、false三种值
DateField([auto_now=False,auto_now_add=False])使用Python的Datetime.date实例表示的日期,auto_now表示每次保存对象是,自动设置该字段为当前时间,用于“最后一次修改”的时间戳,它总是使用当前日期,默认为False。auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前时间,默认为False。说明:该字段默认对于表单控件是一个TextField,在管理员站点添加了一个JavaScript写的日历控件,和一个“Today”的快捷按钮,包含了一个额外的invalid_date错误消息键。注意:auto_now_add、auto_now、defalut这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。
TimeField使用Python的datetime,datetime实例表示的日期和时间,参数同DateField
FiledField一个上传文件的字段
ImageField继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是一个有效的image
字段选项(字段参数)
  • 概述:
    • 通过字段选项,可以实现对字段的约束
    • 在字段对象是通过关键字参数指定
  • null
    • 如果为True,Django将空值已NULL存储到数据库中,默认是False
  • blanke
    • 如果为True,则该字段允许为空白,默认值是False
    • 注意:
      • null是数据库范畴的概念,blank是表单验证范畴的
  • db_column
    • 字段的名称,如未指定,则使用属性的名称
  • db_index
    • 若值为True,则在表中会为此字段创建索引
  • defalut
    • 默认值
  • primary_key
    • 若为True,则该字段会成为模型的主键字段
  • unique
    • 若为True,则该字段的值必须唯一
关系
  • 分类
    • ForeignKey:一对多,将字段定义在多的端中
    • ManyToManyField: 多对多,将字段定义在两端中
    • OneToOneField:一对一,将字段定义在任意一端中。
  • 用一访问多:
    • 格式: 对象.模型类小写_set
    • 示例:grade.students_set
  • 用一访问一:
    • 格式:对象.模型类小写
    • 示例:grade.students
  • 访问id:
    • 格式:对象.属性_id
    • 示例:student.sgrade_id

创建模型类

如需了解更多,请访问: https://www.emperinter.info/2022/05/29/django-models/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值