Django的models中on_delete参数详解


Posted in Python onJuly 16, 2019

在Django2.0以上的版本中,创建外键和一对一关系必须定义on_delete参数,我们可以在其源码中看到相关信息

class ForeignKey(ForeignObject):
  """
  Provide a many-to-one relation by adding a column to the local model
  to hold the remote value.

  By default ForeignKey will target the pk of the remote model but this
  behavior can be changed by using the ``to_field`` argument.
  """

  # Field flags
  many_to_many = False
  many_to_one = True
  one_to_many = False
  one_to_one = False

  rel_class = ManyToOneRel

  empty_strings_allowed = False
  default_error_messages = {
    'invalid': _('%(model)s instance with %(field)s %(value)r does not exist.')
  }
  description = _("Foreign Key (type determined by related field)")

  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):
  • to:关联的表
  • on_delete:当该表中的某条数据删除后,关联外键的操作
  • related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认:set_表名
  • to_field:默认主键,因为mysql只支持主键作为外键,就算你没显式的创建主键,Django会给你自动创建,如果你是DB-first,且没创建主键:数据库默认使用隐藏字段:DB_ROW_ID作为主键

on_delete参数设置

CASCADE:级联删除,当关联表中的数据删除时,该外键也删除

PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。

SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。

SET_DEFAULT: 设置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。

SET(): 自定义一个值,该值当然只能是对应的实体

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python创建线程示例
May 06 Python
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
儿童python练习实例
May 27 Python
Python并发之多进程的方法实例代码
Aug 15 Python
Python实现网站表单提交和模板
Jan 15 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
Python3远程监控程序的实现方法
Jul 15 Python
Python适配器模式代码实现解析
Aug 02 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Django框架模板用法详解
Jun 10 Python
Python3远程监控程序的实现方法
Jul 15 #Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 #Python
Python 获取windows桌面路径的5种方法小结
Jul 15 #Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 #Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 #Python
通过python改变图片特定区域的颜色详解
Jul 15 #Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 #Python
You might like
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
详解php协程知识点
2018/09/21 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python生成器以及应用实例解析
2018/02/08 Python
python实现批量图片格式转换
2020/06/16 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python读写zip压缩文件的方法
2018/08/29 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python持续监听文件变化代码实例
2020/07/22 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
"序列点" 是什么
2016/07/29 面试题
2014年教师节演讲稿
2014/09/03 职场文书
房屋出租委托书格式
2014/09/23 职场文书
初三英语教学计划
2015/01/23 职场文书
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers