[笔记]Model层 与 ORM 对象关系映射

本文详细介绍了Django ORM中的Model层,揭示了如何将Python对象映射到数据库表。讨论了Model的字段类型,包括数值型、布尔型、日期类型和关系类型,并探讨了各种字段的特性和用途。此外,还讲解了Model的常用参数,如null、blank、choices、db_column、index、default、editable和validators,这些参数在实际开发中对于数据验证和数据库交互至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 对象关系映射就是把我们定义的对象映射到对应的数据库的表上,ORM就是代码层面对于数据库表和关系的一种抽象

Django ORM 的具体实现:Model

简单来说,就是继承了 DjangoModel,然后定义了对应的字段,Django就会帮我们把 Model 对应到数据库的表上,Model中定义的属性( 比如:name = models.CharField(max_length=50, verbose_name="名称") )就对应一个表的字段,所以一个Model也就对应关系数据库中的一张表。对于有关联关系的Model,比如用到了ForeignKeyModel,就是通过外键关联的表。

  • 如下面的代码对应到数据库的表:
class Foo(models.Model):
    name = models.CharField(max_length=20)
FieldTypeNullKeyDefaultExtra
idint(11)NOPRINULLauto_increment
namevarchar(20)NONULL

表中的自增 id 是Django的Model内置字段,可以被重写。

Model常用的字段类型

  • 数值型
    • AutoField int(11) 自增主键,Django Model默认提供,可以被重写。完整定义:id = models.AutoField(primary_key=True)
    • BooleanField tinyint(1) 布尔类型字段,一般用于记录状态标记
    • DecimalField decimal 开发对数据精度要求较高的业务时考虑使用,比如支付相关、金融相关。
    • IntegerField int(11)AutoField一样,唯一的差别就是不自增
    • PositiveIntegerFieldIntegerField,只包含正整数
    • SmallIntegerField smallint 小整数时一般会用到
  • 字符型
    • CharField varchar 基础的varchar类型
    • URLField 继承自CharField,但是实现了对URL的特殊处理
    • UUIDField char(32) 除了在PostgreSQL中使用的是uuid类型外,在其他数据库中均是固定长度char(32),用来存放生成的唯一id
    • EmailFieldURLField一样,他继承自CharField,多了对E-mail的特殊处理
    • FileFieldURLField一样,他继承自CharField,多了对文件的特殊处理
    • TextField longtext 一般用来存放大量文本内容,比如新闻正文,博客正文
    • ImageField 继承自FileField,用来处理图片相关的数据,在展示上会有不同
  • 日期类型
    • DateField 日期
    • DateTimeField 日期+时间
    • TimeField 时间
  • 关系类型
    • ForeignKey 外键
    • OneToOneField 一对一关系
    • ManyToManyField 多对多关系

常用参数

  • null 可以同 blank 对比考虑, 其中null用于设定在数据库层面是否允许为空
  • blank 针对业务层面,该值是否允许为空
  • choices 配置字段choices后,在admin页面上会提供一个下拉列表的可选项展示
  • db_column 默认情况下,我们定义的Field就是对应数据库中的字段名称,通过这个参数可以指定Model中的某个字段对应数据库中的哪个字段
  • db_index 索引配置,对于业务上需要经常作为查询条件的字段,应该配置此项
  • default 默认值配置
  • editable 是否可编辑,默认是True
  • error_message 用来自定义字段值校验失败时的异常提示,他是字典格式。key的可选项为nullblankinvalidinvalid_choiceuniqueunique_for_date
  • help_text 字段提示语,配置这一项后,在页面对应字段的下方会展示此配置
  • primary_key 主键,一个Model只允许设置一个字段为primary_key
  • unique 唯一约束,当需要配置唯一值时,设置unique=True,设置此项后,不需要设置db_index
  • unique_for_date 针对日期的联合约束,比如我们需要一天只能有一篇名为《XXX》的文章,那么可以在定义title字段时配置参数:unique_for_date="created_time"
  • unique_for_month 针对月份的联合约束
  • unique_for_year 针对年份的联合约束
  • verbose_name 字段对应的展示文案
  • validators 自定义校验逻辑,同form类似
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_linbobo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值