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下载Bing图片(代码)
Nov 07 Python
github配置使用指南
Nov 18 Python
Python中的ctime()方法使用教程
May 22 Python
python常见排序算法基础教程
Apr 13 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
Python简单I/O操作示例
Mar 18 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
python基于机器学习预测股票交易信号
May 25 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP输出日历表代码实例
2015/03/27 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
angularJS 入门基础
2015/02/09 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
VSCode搭建Vue项目的方法
2020/04/30 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
python中的colorlog库使用详解
2019/07/05 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
便利店投资创业计划书
2014/02/08 职场文书
餐厅总厨求职信
2014/03/04 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
普通党员个人整改措施
2014/10/27 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
地道战观后感
2015/06/04 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
JS class语法糖的深入剖析
2022/07/07 Javascript
python高温预警数据获取实例
2022/07/23 Python