Web后端:Django的models.py中on_delete=models.CASCADE的作用

细读Django官方文档是浑然不知“on_delete=models.CASCADE”是干啥用的。于是查了查..

运行环境 Runtime environment

1
2
3
4
操作系统 : Ubuntu18.04  
IDE: JetBrains Pycharm 2018.2.4 x64
Python: 3.6.2
Django: 2.0.3

背景

今日想设计一下小说网站的数据库,并通过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是必须加上的。而当删除“作者”的时候,相应他的“书籍”也会一起连带删除!

×

也就放着玩的

扫码支持
扫码打赏,其实感觉也没人会给的。。

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 运行环境 Runtime environment
  • 背景
  • on_delete=models.CASCADE级联删除
  • 总结
  • ,