对django2.0 关联表的必填on_delete参数的含义解析


Posted in Python onAugust 09, 2019

一对多(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 参数,所以略过不提.

以上这篇对django2.0 关联表的必填on_delete参数的含义解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python生成随机数的方法
Jan 14 Python
Python中optionParser模块的使用方法实例教程
Aug 29 Python
Python入门教程之if语句的用法
May 14 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
Python get获取页面cookie代码实例
Sep 12 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 #Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 #Python
基于django ManyToMany 使用的注意事项详解
Aug 09 #Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 #Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 #Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 #Python
python操作excel让工作自动化
Aug 09 #Python
You might like
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php中的比较运算符详解
2013/10/28 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php组合排序简单实现方法
2016/10/15 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
Seajs源码详解分析
2019/04/02 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
在校生自我鉴定
2014/01/23 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
python基础之爬虫入门
2021/05/10 Python