模型之间的关系
(1) 一对一
实现: 使用models.OneToOneField来实现
这个字段在哪个模型都可以(人, id卡)
注意:
使用OneToOne的模型
- 默认会随着绑定的模型的改变去改变, 绑定的数据删除, 它也会被删除
- 添加的数据主表的id只能在从表中出现一次,一一对应的关系
- 主表的数据可以添加多个(从表绑定这主表,所以从表一个只能出现一次)
- 如果删除从表的数据, 主表(被绑定的模型)数据不会有任何变化
添加顺序表:
- 先添加主表数据
- 在添加从表
- OneToOneField绑定的表为主表,本身表为从表
绑定字段的on_delete属性: - models.CASCADE 为默认值, 主表数据删除, 从表跟随删除
- models.PROTECT 保护模式, 主表数据有从表数据关联的时候, 主表不能删除
id_persion = models.OneToOneField('Person', on_delete=models.PROTECT)
- models.SET_NULL 设置null模式
id_person = models.OneToOneField('Person',on_delete=models.SET_NULL,null=True)
注意: 需要将库删除 重新生成迁移文件(因为表结构已经设置为不为null)
(2) 一对多
使用ForeignKey去创建一对多关系
使用和一对一一样, 区别(从表可以添加多条数据)
(3) 多对多
使用ManyToManyField去创建多对多的关系
1.使用在从表中(非用户表)
2.在创建好模型 生成迁移文件的时候 会多生成一个外键表 来存储关联的id
3.表中存储的是多对多的关系的数据
4.添加关联数据的方法
- buyer.goods_set.add(g) # 通过商品的小写模型名称_set.add(商品的对象)
- 通过关联属性添加 g.从表的关联属性名.add(b)
5.添加删除的方法
- add()
- clear() 清除关联数据(将关联表中指定的数据删除)
6.俩个表都是独立的关系
网友评论