• 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(可执行对象)
    
  • 相关阅读:
    桥接模式新解:客户端服务器模式
    laravel-admin 自定义导出表单
    PHP实现git部署的方法,可以学学!
    PHP的安全性问题,你能说得上几个?
    nginx的四个基本功能
    laravel orm
    laravel-admin列表排序在使用了$grid->model()->latest()后$grid其它加上sortable()可排序的列在排序时不起作用
    Laravel 5.4: 特殊字段太长报错 420000 字段太长
    关于在phpStudy环境下,windows cmd中 php不是内部命令问题
    phpstudy安装好之后mysql无法启动(亲测可行)
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523370.html
Copyright © 2020-2023  润新知