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(可执行对象)
原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523370.html