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中处理unchecked未捕获异常实例
Jan 17 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
浅析Python函数式编程
Oct 06 Python
Python 学习教程之networkx
Apr 15 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
django迁移文件migrations的实现
Mar 31 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
Python基于locals返回作用域字典
Oct 17 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
浅析php原型模式
2014/11/25 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
itchat接口使用示例
2017/10/23 Python
Python if语句知识点用法总结
2018/06/10 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
大学校园活动策划书
2014/02/04 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
地方白酒代理协议书
2014/10/25 职场文书
小学生作文批改评语
2014/12/25 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL