zoukankan      html  css  js  c++  java
  • 08_关联模型表实现关系字段的on_delete参数详解

    外键删除操作:

    如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过 on_delete 来指定。可以指定的类型如下:

    1. CASCADE :级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。
    2. PROTECT :受保护。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。
    3. SET_NULL :设置为空。如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空。如果设置这个选项,前提是要指定这个字段可以为空。
    4. SET_DEFAULT :设置默认值。如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。
    5. SET() :如果外键的那条数据被删除了。那么将会获取 SET 函数中的值来作为这个外键值。 SET 函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。
    6. DO_NOTHING :不采取任何行为。一切全看数据库级别的约束。
      以上这些选项只是Django级别的,数据级别依旧是RESTRIC

    on_delete参数的各个值的含义:

    参数:on_delete=???,               # 删除关联表中的数据时,当前表与其关联的field的行为
    
    1. on_delete=models.CASCADE,     # 删除关联数据,与之关联也删除 (如: 删除python学院的时候,则把与python学院关联的那些数据也删除)
    
    on_delete=models.DO_NOTHING,  # 删除关联数据,什么也不做
    
    3. on_delete=models.PROTECT,     # 删除关联数据,引发错误ProtectedError  (与数据库的条件一样了,如果这个学院还有人,则不能删除这个学院)
    
    2. on_delete=models.SET_NULL,  # (需要设置null=True, 如把这个学院删除了,则与之关联的数据则设置为 null)   # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空null=True,一对一同理)
    models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
    
    on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理 如下:
    models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
    
    on_delete=models.SET,         # 删除关联数据,
     a. 与之关联的值设置为指定值,设置:models.SET(值)
     b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
    
  • 相关阅读:
    Daliy Algorithm (dp,模拟)-- day 80
    Daliy Algorithm (dp,堆)-- day 79
    Mybatis一级缓存和二级缓存 Redis缓存
    简单排序
    java一个大接口拆用多线程方式拆分成多个小接口
    集群环境下Shiro Session的管理
    递归和快速排序
    分布式定时任务
    Redis集群架构
    IO流
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523370.html
Copyright © 2011-2022 走看看