加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

django模型中有外键关系的表删除相关设置

发布时间:2020-12-15 17:10:17 所属栏目:大数据 来源:网络整理
导读:0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有 Author、AuthorDetail两表 author = models.OneToOneField(to='Author',null=True,related_name='detail',db_constraint=False,on_delete=models.CASCADE ) 1)关系字段放在AuthorDet

0904自我总结

django模型中有外键关系的表删除相关设置

一.一对一

例如有Author、AuthorDetail两表

author = models.OneToOneField(to='Author',null=True,related_name='detail',db_constraint=False,on_delete=models.CASCADE
    )

1)关系字段放在AuthorDetail表中:作者删除详情删除,详情删除作者保留
2)作者找详情用 外键related_name(detail),详情找作者用 外键字段(author)
3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.CASCADE级联删除

二.一对多

例如Book、Publish两表

publish = models.ForeignKey(to='Publish',related_name='books',on_delete=models.DO_NOTHING,)

1)关系字段放在Book表中(多的一方):出版社删除书外键不动,书删除没有任何影响
2)出版社找书用 外键related_name(books),书找出版社 外键字段(publish)
3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.DO_NOTHING关联无动作

三.以外键字段关联

1)断关联,删除关联表记录,外键值置空
db_constraint=False,on_delete=models.SET_NULL,

2)断关联,删除关联表记录,外键值置默认值
db_constraint=False,on_delete=models.SET_DEFAULT,default=1,

注意:on_delete必须声明models.DO_NOTHING为删除级联关系,models.CASCAD为级联关系,'SET_NULL'置空,SET_DEFAULT设为默认值

两者区别

  • models.SET关联表内容删了,关联的相关内容不会删除
  • models.CASCAD关联表内容删了,关联的相关内容会删除

db_constraint关系断开后,但是不影响联表查询

四.多对多关系

例如Book、Author两表

authors = models.ManyToManyField(to='Author',)

1)关系字段放在任意一方都可以:出版社删除或书删除彼此不影响,但关系表一定级联删除
2)正向找 外键字段,反向找 外键字段related_name
3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置,且一定是级联)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读