细读Django官方文档是浑然不知“on_delete=models.CASCADE”是干啥用的。于是查了查..
运行环境 Runtime environment
1 | 操作系统 : Ubuntu18.04 |
背景
今日想设计一下小说网站的数据库,并通过django的models模块来实现,
练习Django中的一对多关系,使用Foreign关键字创建多对一的关系,Foreign(外键所在类对象的名字)
在翻读查阅Django官方文档是浑然不知“on_delete=models.CASCADE”是干啥用的。
以前似乎没注意用过这个东西,于是简单的去了解一下。
on_delete=models.CASCADE级联删除
比如:书籍和作者的关系1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 作者
class writer(models.Model):
name = mode.CharField(max_length=30)
def __str__(self):
return self.name
# 书籍信息
class book(models.Model):
title = mode.CharField(max_length=100)
# ForeignKey() 定义多对一关系
the_writer = models.ForeignKey(writer)
def __str__(self):
return self.title
第一次创建的时候,在Book类的the_writer字段的第二个参数我没有添加on_delete=models.CASCADE,在使用python manage.py makeigrations 进行迁移的时候的出错了。
报错信息为:
TypeError: init() missing 1 required positional argument:”on_delete”
之后加上“on_delete=models.CASCADE”来解决问题。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 作者
class writer(models.Model):
name = mode.CharField(max_length=30)
def __str__(self):
return self.name
# 书籍信息
class book(models.Model):
title = mode.CharField(max_length=100)
# ForeignKey() 定义多对一关系
the_writer = models.ForeignKey(writer, on_delete=models.CASCADE)
def __str__(self):
return self.title
经过筛查,在创建多对一的关系的,需要在Foreign的第二参数中加入on_delete=models.CASCADE 主外关系键中,级联删除,也就是当删除主表的数据时候从表中的数据也随着一起删除。
详细文档,可以访问官方文档进行了解
https://docs.djangoproject.com/zh-hans/2.1/topics/db/models/
总结
简单话来讲,Django中使用models处理多对一(“书多对作者一”)的情况时,on_delete=models.CASCADE是必须加上的。而当删除“作者”的时候,相应他的“书籍”也会一起连带删除!