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的绘图工具matplotlib使用实例
Jul 03 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
Python使用gensim计算文档相似性
Apr 10 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
简单谈谈Python面向对象的相关知识
Jun 28 Python
Python if else条件语句形式详解
Mar 24 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
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
javascript Prototype 对象扩展
2009/05/15 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
python中update的基本使用方法详解
2019/07/17 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
公司出纳岗位职责
2013/12/07 职场文书
优秀员工获奖感言
2014/03/01 职场文书
捐款倡议书
2014/04/14 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
合伙经营协议书范本
2014/09/13 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL