- 一对一:关联字段OneToOneField可以定义在任意一个模型中。
calss A:
calss B:
c = OneToOneField(A, null=True,on_delete=CASCADE,related_name='d')
1.通过B的对象b,查询A对象
b.c
2.通过A的对象a,查询B对象,已定义relate_name
a.d
3.通过A的对象a,查询B对象,没有定义relate_name
a.b
- 一对多:关联字段ForeignField只能定义在多的一个模型中。
"""
on_delete = models.CASCADE 级联删除(主键删除不删除外键)
on_delete = models.PROTECT 保护模式(不允许删除)
on_delete = models.SET_NULL 主键删除。外键设置为NULL
on_delete = models.SET_DELETE 主键删除,外键设置为默认值
"""
calss A:
calss B:
c = ForeignField(A, null=True,on_delete=CASCADE,related_name='d')
1.通过B的对象b,查询A对象
b.c
2.通过A对象a,查询B对象,已定义relate_name
a.d.all()
3.通过A对象a,查询B对象,没有定义relate_name
a.b_set.all()
- 多对多:关联字段ManyToManyField可以定义在任意一个模型中。
calss A:
calss B:
c = ManyToManyField(A, null=True,on_delete=CASCADE,related_name='d')
1.通过B的对象b,查询A对象
b.c
2.通过A对象a,查询B对象,已定义relate_name
a.d.all()
3.通过A对象a,查询B对象,没有定义relate_name
a.b_set.all()
4.添加数据
已经定义relate_name: b.c.add()
没有定义relate_name: a.b_set.add() / a.d.add()
5.删除数据
已经定义relate_name: b.c.remove()
没有定义relate_name: a.b_set.remove() / a.d.remove()