对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中函数的用法实例教程
Sep 08 Python
Python3 能振兴 Python的原因分析
Nov 28 Python
python如何实现一个刷网页小程序
Nov 27 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python 中Django安装和使用教程详解
Jul 03 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
Python: 传递列表副本方式
Dec 19 Python
python 下载文件的几种方式分享
Apr 07 Python
Python正则表达式中flags参数的实例详解
Apr 01 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+MySQL的聊天室设计
2006/10/09 PHP
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
php 邮件发送问题解决
2014/03/22 PHP
php中chdir()函数用法实例
2014/11/13 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
webpack多页面开发实践
2017/12/18 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Python实现的简单模板引擎功能示例
2017/09/02 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
python 的topk算法实例
2020/04/02 Python
大家访活动实施方案
2014/03/10 职场文书
旅游安全协议书
2014/04/21 职场文书
车间安全生产标语
2014/06/06 职场文书
西柏坡导游词
2015/02/05 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
Python读取和写入Excel数据
2022/04/20 Python
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL