对django2.0 关联表的必填on_delete参数的含 * 析
作者:buxianghejiu 发布时间:2023-04-01 22:59:28
标签:django2.0,on,delete
一对多(ForeignKey)
class ForeignKey(ForeignObject):
def __init__(self, to, on_delete, related_name=None, related_query_name=None,
limit_choices_to=None, parent_link=False, to_field=None,
db_constraint=True, **kwargs):
super().__init__(to, on_delete, from_fields=['self'], to_fields=[to_field], **kwargs)
一对一(OneToOneField)
class OneToOneField(ForeignKey):
def __init__(self, to, on_delete, to_field=None, **kwargs):
kwargs['unique'] = True
super().__init__(to, on_delete, to_field=to_field, **kwargs)
从上面外键(ForeignKey)和一对一(OneToOneField)的参数中可以看出,都有on_delete参数,而 django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
因此,整理一下on_delete参数的各个值的含义:
on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE, # 删除关联数据,与之关联也删除
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(可执行对象)
多对多(ManyToManyField)
class ManyToManyField(RelatedField):
def __init__(self, to, related_name=None, related_query_name=None,
limit_choices_to=None, symmetrical=None, through=None,
through_fields=None, db_constraint=True, db_table=None,
swappable=True, **kwargs):
super().__init__(**kwargs)
因为多对多(ManyToManyField)没有 on_delete 参数,所以略过不提.
来源:https://blog.csdn.net/buxianghejiu/article/details/79086011
0
投稿
猜你喜欢
- HP注释规范注释在写代码的过程中非常重要,好的注释能让你的代码读起来更轻松,在写代码的时候一定要注意注释的规范。“php是一门及其容易入门的
- mysql高效查询mysql牺牲了group by来增加left join的速度(前提是加了索引)。user表:10万数据实例1: 200秒
- 本文介绍基于Python语言gdal模块,实现多波段HDF栅格图像文件的读取、处理与像元值可视化(直方图绘制)等操作。另外,基于gdal等模
- 功能:返回字符、二进制、文本或图像表达式的一部分语法:SUBSTRING ( expression, start, length )&nbs
- 一开始的目的是学习十大挖掘算法(机器学习算法),并用编码实现一遍,但越往后学习,越往后实现编码,越发现自己的编码水平低下,学习能力低。这一个
- 一.背景: 当数据量过大时,一个程序的执行时间就会主要花费在等待单次查询返
- MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的。点击进入:下载地址1.下面是msi的下载和安装的步骤点击进去之后根据自己
- 本文实例为大家分享了微信小程序实现简单计算器与秒表的具体代码,供大家参考,具体内容如下实验内容:任务一:实现一个简单的加减乘除运算。首先输入
- 前言reinhard算法:Color Transfer between Images,作者Erik Reinhardwelsh算法:Tran
- 今天我们分享一个小案例,获取天气数据,进行可视化分析,带你直观了解天气情况!核心功能设计总体来说,我们需要先对中国天气网中的天气数据进行爬取
- 使用python写爬虫时,优选selenium,由于PhantomJS因内部原因已经停止更新,最新版的selenium已经使用headles
- 概念Node.js 是构建在Chrome javascript runtime之上的平台,能够很容易的构建快速的,可伸缩性的网络应用程序。N
- 用python语言读取二进制图片文件,并提取非零数据统计信息(例如:max,min,skewness and kurtosis)python
- 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持。1、定时任务定时任务,顾名思义: 定时执行的任
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 假设我们有以下虚拟函数:import sysdef writeline(text, stream=sys.stdout): stream.w
- 功能输入一个特定格式的时间戳,自动获取前进或者后退多少小时之后的时间附加函数时间戳转换函数def date_time_str_to_long
- 目录一、ACID 特性二、事务控制语法三、事务并发异常1、脏读2、不可重复读3、幻读四、事务隔离级别一、ACID 特性事务处理是一种对必须整
- 为了把事情变成简单化,我在多个Oracle数据上建立统一的检查数据库账户,并且账户只能访问特定的几个视图(需要查询的sql已生成视图),具体
- 1 基本信息- 模块主页:[github]- 类型:#第三方库2 安装方法pip install pythonping3 一般使用from