on_delete=models.CASCADE级联删除

发布时间 2023-05-25 16:38:10作者: Oops!#

on_delete=None, # 默认models.CASCADE

 


on_delete=models.CASCADE, # 级联删除,即关联的表删除某一项数据,此表关联的数据都会被删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Publisher(models.Model):
    name=models.CharField(max_length=32)
 
 
class Book(models.Model):
    name=models.CharField(max_length=32)
    publisher=models.ForeignKey(to="Publisher",on_delete=models.CASCADE)
 
 
'''
出版社
id  name
1   新华出版社
2   人民出版社   
3   机械工业出版社
 
 
id     name     publisher_id
1   新华字典            1
2   少年阿宾            2
3   python之路          3 
4   自然                1 
 
#级联删除,表示假如出版社删除了1和2,字段,关联到书的都会被删除掉,即会删除1,2,4
'''

  

 

on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做

 


on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError,保护作用,关联的表删除,会提醒不让删除

 


# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)

on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)

 


# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')

on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)

 


on_delete=models.SET(值), # 删除关联数据,

a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)