对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 合并文件的具体实例
Aug 08 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
python使用turtle库绘制时钟
Mar 25 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
python的继承知识点总结
Dec 10 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
Django框架models使用group by详解
Mar 11 Python
linux 下selenium chrome使用详解
Apr 02 Python
python用字节处理文件实例讲解
Apr 13 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和ACCESS写聊天室(四)
2006/10/09 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
发现的以前不知道的函数
2006/09/19 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python实现批量压缩图片
2018/01/25 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
库房管理员岗位职责
2014/03/09 职场文书
2014年教务处工作总结
2014/12/03 职场文书
2015年小学开学寄语
2015/02/27 职场文书
不同意离婚答辩状
2015/05/22 职场文书
工作收入证明范本
2015/06/12 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL