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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python 类的特殊成员解析
Jun 20 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
python安装本地whl的实例步骤
Oct 12 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
如何用python批量调整视频声音
Dec 22 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
php xhprof使用实例详解
2019/04/15 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
微信小程序实现打卡日历功能
2020/09/21 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
小程序实现录音功能
2020/09/22 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
django数据库自动重连的方法实例
2019/07/21 Python
关于numpy数组轴的使用详解
2019/12/05 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
南京某公司笔试题
2013/01/27 面试题
护士专业推荐信
2013/11/02 职场文书
教师个人剖析材料
2014/02/05 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
2014年政工师工作总结
2014/12/18 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
go goroutine 怎样进行错误处理
2021/07/16 Golang
cypress测试本地web应用
2022/06/01 Javascript
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS