zoukankan      html  css  js  c++  java
  • django模型中有外键关系的表删除相关设置

    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', 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关联无动作

    三.以外键字段关联

    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不存在(不设置,本质在第三张表中设置,且一定是级联)

  • 相关阅读:
    ceph pool 管理
    python 创建一个实例:步骤二 添加行为方法,编写方法
    python 创建一个实例:步骤一 编写一个构造函数
    Ceph集群rbd-mirror A、B区域备份实施方案
    python 函数中的递归、lambda 、map reduce 等详解
    reduce python 的用法
    python 搜集参数的共有项和所有项
    argument python 参数 举例
    The Preliminary Contest for ICPC Asia Nanjing 2019 A The beautiful values of the palace(树状数组+思维)
    hdu 4614 Vases and Flowers(线段树+二分)
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11461384.html
Copyright © 2011-2022 走看看