对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中enumerate的用法实例解析
Aug 18 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
python将txt文件读入为np.array的方法
Oct 30 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
python对csv文件追加写入列的方法
Aug 01 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
关于python 的legend图例,参数使用说明
Apr 17 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
python如何利用Mitmproxy抓包
Oct 10 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解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
python实现目录树生成示例
2014/03/28 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
使用python实现名片管理系统
2020/06/18 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
文秘专业个人求职信
2013/12/22 职场文书
一般党员对照检查材料
2014/09/24 职场文书
储备店长岗位职责
2015/04/14 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
创业计划书之餐饮
2019/09/02 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
MySQL库表名大小写的选择
2021/06/05 MySQL
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python