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实现基于两张图片生成圆角图标效果的方法
Mar 26 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python常用小技巧总结
Jun 01 Python
Django中处理出错页面的方法
Jul 15 Python
python中import reload __import__的区别详解
Oct 16 Python
使用pandas的box_plot去除异常值
Dec 10 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
python 实现线程之间的通信示例
Feb 14 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
python字典按照value排序方法
Dec 28 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 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&mysql(一)
2006/10/09 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php实现的http请求封装示例
2016/11/08 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
js闭包的用途详解
2014/11/09 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
Python_LDA实现方法详解
2017/10/25 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
详解python中递归函数
2019/04/16 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
学生处主任岗位职责
2013/12/01 职场文书
妇产医师自荐信
2014/01/29 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
学校教学工作总结2015
2015/05/19 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL