对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实现DNS正向查询、反向查询的例子
Apr 25 Python
python实现爬虫下载美女图片
Jul 14 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
Python for循环与getitem的关系详解
Jan 02 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 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实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
python基础教程之类class定义使用方法
2014/02/20 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python常见数制转换实例分析
2015/05/09 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python实现决策树分类(2)
2018/08/30 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
OpenCV 模板匹配
2019/07/10 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2015年双拥工作总结
2015/04/08 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python