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 GAE、Django导出Excel的方法
Nov 24 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
python如何让类支持比较运算
Mar 20 Python
python中cPickle类使用方法详解
Aug 27 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
python实现交并比IOU教程
Apr 16 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 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即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
jQuery 注意事项 与原因分析
2009/04/24 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
python使用cPickle模块序列化实例
2014/09/25 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python读取二进制mnist实例详解
2017/05/31 Python
基于Django用户认证系统详解
2018/02/21 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
工程业务员工作职责
2013/12/07 职场文书
物资采购方案
2014/06/12 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
交通事故起诉书
2015/05/19 职场文书
一文搞懂MySQL索引页结构
2022/02/28 MySQL
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫