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 相关文章推荐
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
Python实现抢购IPhone手机
Feb 07 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
numpy中的ndarray方法和属性详解
May 27 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python实现根据文件格式分类
Oct 31 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 Python
Python循环之while无限迭代
Apr 30 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/11/20 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python自带的http模块详解
2016/11/06 Python
Python中django学习心得
2017/12/06 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
进修护士自我鉴定
2013/10/14 职场文书
跟单文员岗位职责
2014/01/03 职场文书
工地安全检查制度
2014/02/04 职场文书
个性发展自我评价
2014/02/11 职场文书
申论倡议书范文
2014/05/13 职场文书
租房协议书范例
2014/10/14 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python