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获取文件ssdeep值的方法
Oct 05 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
tensorflow实现softma识别MNIST
Mar 12 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
简单了解Python matplotlib线的属性
Jun 29 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
python实现拼图小游戏
Feb 22 Python
python的sys.path模块路径添加方式
Mar 09 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
python实现简单猜单词游戏
Dec 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
python 简单的多线程链接实现代码
2016/08/28 Python
python如何让类支持比较运算
2018/03/20 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
高中化学教学反思
2014/01/13 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
企业宣传方案
2014/03/04 职场文书
售后求职信范文
2014/03/15 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书