美文网首页
Django模型中有外键关系的表删除相关设置

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

作者: 25岁学Python | 来源:发表于2020-01-10 15:49 被阅读0次

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', null=True,
        related_name='books',
        db_constraint=False,
        on_delete=models.DO_NOTHING,

    )

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


推荐Python大牛在线分享技术 扣qun:855408893

领域:web开发,爬虫,数据分析,数据挖掘,人工智能

零基础到项目实战,7天学习上手做项目

三.以外键字段关联

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

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', null=True,
        related_name='books',
        db_constraint=False,
    )

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

相关文章

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

    django模型中有外键关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 1)关...

  • MySQL-11建立关系表

    外键 和 关系 设计E-R模型时就应设计表之间的关系,而确定好表关系模型后,再通过外键将表关系提现 1.建立表时可...

  • 设置外键,外键约束值的区别

    laravel 设置外键,并设置外键约束的方式 为联级删除 更新:在使用Navicat for mysql设计表时...

  • Django模型(三)

    知识要点: 表关系的实现 一对多表关系 在Mysql中一对多是通过外键实现的,在django模型中通过Foreig...

  • 4.4 django 模型外键和表关系

    外键和表关系 外键: 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是Inn...

  • Django基础:开发中关于外键设置

    django开发中关于外键设置 我们建模型的时候会用到ForeignKey 而由于外键的约数会导致一些保存 所有我...

  • 2018-05-25

    Django模型关系 1:1OneToOneField内部实现使用外键,ForeignKey实现对外键添加了一个唯...

  • django模型中关联关系查询

    写的很乱,写的时候思路不够清晰 django中模型多对多关系 ForeignKey外键约束,在django中是表示...

  • mysql-删除关联表

    1.删除表的外键约束 外键是一个特殊字段,其将某一个表与其父表建立关联关系。在创建表的时候,外键约束就已经设定好了...

  • Zabbix数据库优化(Oracle表分区)

    1. 删除zabbix表,重建分区表 a) 保存即将删除表的ddl,外键 b) 根据ddl创建test表,将外键,...

网友评论

      本文标题:Django模型中有外键关系的表删除相关设置

      本文链接:https://www.haomeiwen.com/subject/humyoctx.html