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实现保存网页到本地示例
Mar 16 Python
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
详解用python实现简单的遗传算法
Jan 02 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
Python2与Python3的区别实例分析
Apr 11 Python
使用Python实现跳帧截取视频帧
May 31 Python
Python学习笔记之自定义函数用法详解
Jun 08 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python将字符串转变成dict格式的实现
Nov 18 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
浅谈Python中对象是如何被调用的
Apr 06 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之第六天
2006/10/09 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
学习PHP session的传递方式
2016/06/15 PHP
js读取本地excel文档数据的代码
2010/11/11 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python针对excel的操作技巧
2018/03/13 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
Python 如何对文件目录操作
2020/07/10 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
小学新学期教师寄语
2014/01/18 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
活动总结格式
2014/08/30 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
走群众路线学习笔记
2014/11/06 职场文书
倡议书格式及范文
2015/04/29 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python