Django模型中的关系:一对一、一对多与多对多

Django模型中的关系:一对一、一对多与多对多

数据库中的表存在关联关系,Django中的模型对应数据库中的表,因此Django中的模型也存在一对一、一对多与多对多这三种关系。


1 . 一对一关系

比如用户基本信息模型类与用户拓展信息模型类,是一对一关系,在模型中用 models.OneToOneField() 来构建模型与模型的一对一关系。

1.1 OneToOneField()的参数

参数参数含义
to要进行关联的模型名称
to_field要进行关联的字段名称
on_delete删除关联表中数据时要执行的操作配置项

1.2 on_delete参数配置选型

配置选项配置选项含义
CASECADE删除基本信息表时,一并删除拓展信息表中的内容
PROTECT删除基本信息表时抛出错误,不删除拓展表中的内容
SET_NULL删除时,如果关联表中字段属性设置为null=True时,将此字段内容置空
SET_DEFAULT设置为默认值
SET设置为指定值
DO_NOTHING删除基本信息表时,对关联表不做任何操作

2. 一对多关系

一个用户可以有多个兴趣爱好,用户表与用户爱好表是一对多关系,在模型中用 models.ForeignKey() 方法来构建模型的一对多关系。

2.1 ForeignKey()的参数

参数含义
to要进行关联的模型名称
to_field要进行关联的字段名称
on_delete删除关联表中数据时要执行的操作配置项
related_name=None在反向操作时使用的字段名,用于替代[表名_set]。如obj.表名_set.all()
related_query_name=None在反向操作时,使用的连接前缀,用以替换表名
db_constraint=True是否在数据库中创建外键约束

一对多关系中,一般将ForeignKey()放到多的数据表对应的模型中。


3. 多对多关系

手机型号与手机颜色是多对多关系,一个手机型号可以对应多种颜色,一种颜色也可对应于多种手机型号。在模型中,用 models.ManyToManyField()方法构建模型的多对多关系。

3.1 ManyToManyField()的参数

参数含义
to要进行关联的模型名称
db_constraint=True是否在数据库中创建外键约束
db_table=None默认创建的多对多关系表名

ManyToManyField()方法中没有on_delete参数,db_table参数表示模型迁移后生成的多对多关系的表名,如果不设定,则默认生成的表名为两个模型名称的相加。


版权声明:本文为qq_42774234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。