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友情链接检查方法
Jul 08 Python
python实现归并排序算法
Nov 22 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
python如何更新包
Jun 11 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
python根据字典的键来删除元素的方法
Aug 16 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
pycharm代码删除恢复的方法
Jun 26 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 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
Zend 输出产生XML解析错误
2009/03/03 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
javascript 避免闭包引发的问题
2009/03/17 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
开展读书活动总结
2014/06/30 职场文书
开学典礼校长致辞
2015/07/29 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
sql注入教程之类型以及提交注入
2021/08/02 MySQL