对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 datetime时间格式化去掉前导0
Jul 31 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python如何制作缩略图
Apr 30 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
python实现超市商品销售管理系统
Oct 25 Python
Python简单实现区域生长方式
Jan 16 Python
解决echarts中饼图标签重叠的问题
May 16 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
详解Python中的路径问题
Sep 02 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python 一维二维插值实例
2020/04/22 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
爱国影片观后感
2015/06/18 职场文书
2015团员个人年度总结
2015/11/24 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang
详解OpenCV曝光融合
2022/04/29 Python
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android