对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批量下载图片的三种方法
Apr 22 Python
Python数组条件过滤filter函数使用示例
Jul 22 Python
python妹子图简单爬虫实例
Jul 07 Python
Django密码系统实现过程详解
Jul 19 Python
Python占用的内存优化教程
Jul 28 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 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
ThinkPHP模板输出display用法分析
2014/11/26 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
python selenium循环登陆网站的实现
2019/11/04 Python
Django异步任务线程池实现原理
2019/12/17 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
中年人生感言
2014/02/04 职场文书
公司办公室岗位职责
2014/03/19 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
购房意向书
2014/08/30 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers