对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 28 Python
python比较两个列表是否相等的方法
Jul 28 Python
python装饰器与递归算法详解
Feb 18 Python
python开发之list操作实例分析
Feb 22 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python iter()函数用法实例分析
Mar 17 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP Document 代码注释规范
2009/04/13 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
python单例设计模式实现解析
2020/01/07 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
C#和SQL Server的面试题
2016/08/12 面试题
秘书岗位职责
2013/11/18 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
生活部的活动方案
2014/08/19 职场文书
影视广告专业求职信
2014/09/02 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
小学生优秀评语
2014/12/29 职场文书
初婚初育证明范本
2015/06/18 职场文书
56句经典英文座右铭
2019/08/09 职场文书
python的变量和简单数字类型详解
2021/09/15 Python