Model层 与 ORM 对象关系映射
- 对象关系映射就是把我们定义的对象映射到对应的数据库的表上,ORM就是代码层面对于数据库表和关系的一种抽象
Django ORM 的具体实现:Model
简单来说,就是继承了 Django 的 Model,然后定义了对应的字段,Django就会帮我们把 Model 对应到数据库的表上,Model中定义的属性( 比如:name = models.CharField(max_length=50, verbose_name="名称") )就对应一个表的字段,所以一个Model也就对应关系数据库中的一张表。对于有关联关系的Model,比如用到了ForeignKey的Model,就是通过外键关联的表。
- 如下面的代码对应到数据库的表:
class Foo(models.Model):
name = models.CharField(max_length=20)
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | NULL |
表中的自增 id 是Django的Model内置字段,可以被重写。
Model常用的字段类型
- 数值型
-
AutoField int(11)自增主键,Django Model默认提供,可以被重写。完整定义:id = models.AutoField(primary_key=True) -
BooleanField tinyint(1)布尔类型字段,一般用于记录状态标记 -
DecimalField decimal开发对数据精度要求较高的业务时考虑使用,比如支付相关、金融相关。 -
IntegerField int(11)同AutoField一样,唯一的差别就是不自增 -
PositiveIntegerField同IntegerField,只包含正整数 -
SmallIntegerField smallint小整数时一般会用到
-
- 字符型
-
CharField varchar基础的varchar类型 -
URLField继承自CharField,但是实现了对URL的特殊处理 -
UUIDField char(32)除了在PostgreSQL中使用的是uuid类型外,在其他数据库中均是固定长度char(32),用来存放生成的唯一id -
EmailField同URLField一样,他继承自CharField,多了对E-mail的特殊处理 -
FileField同URLField一样,他继承自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的可选项为null、blank、invalid、invalid_choice、unique和unique_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类似

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

被折叠的 条评论
为什么被折叠?



