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中super关键字用法实例分析
May 28 Python
浅谈django中的认证与登录
Oct 31 Python
Python表示矩阵的方法分析
May 26 Python
python ansible服务及剧本编写
Dec 29 Python
对python中的argv和argc使用详解
Dec 15 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
如何在python中写hive脚本
Nov 08 Python
Python中的xlrd模块使用原理解析
May 21 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
python数字图像处理之图像的批量处理
Jun 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
日本十大惊悚动漫
2020/03/04 日漫
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
用JS实现选项卡
2020/03/23 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
python实现textrank关键词提取
2018/06/22 Python
django foreignkey(外键)的实现
2019/07/29 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python如何调用百度识图api
2020/09/29 Python
Python的信号库Blinker用法详解
2020/12/31 Python
群众路线剖析材料
2014/02/02 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
高中军训感想800字
2014/02/23 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
音乐之声观后感
2015/06/04 职场文书
2016新年年会主持词
2015/07/06 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
员工试用期工作总结
2019/06/20 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL