对django2.0 关联表的必填on_delete参数的含义解析


Posted in Python onAugust 09, 2019

一对多(ForeignKey)

class ForeignKey(ForeignObject):
  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):
    super().__init__(to, on_delete, from_fields=['self'], to_fields=[to_field], **kwargs)

一对一(OneToOneField)

class OneToOneField(ForeignKey):
  def __init__(self, to, on_delete, to_field=None, **kwargs):
    kwargs['unique'] = True
    super().__init__(to, on_delete, to_field=to_field, **kwargs)

从上面外键(ForeignKey)和一对一(OneToOneField)的参数中可以看出,都有on_delete参数,而 django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:

TypeError: __init__() missing 1 required positional argument: 'on_delete'

因此,整理一下on_delete参数的各个值的含义:

on_delete=None,        # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,   # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT,   # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,  # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,     # 删除关联数据,
 a. 与之关联的值设置为指定值,设置:models.SET(值)
 b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

多对多(ManyToManyField)

class ManyToManyField(RelatedField):
  def __init__(self, to, related_name=None, related_query_name=None,
         limit_choices_to=None, symmetrical=None, through=None,
         through_fields=None, db_constraint=True, db_table=None,
         swappable=True, **kwargs):
    super().__init__(**kwargs)

因为多对多(ManyToManyField)没有 on_delete 参数,所以略过不提.

以上这篇对django2.0 关联表的必填on_delete参数的含义解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 控制语句
Nov 03 Python
Python paramiko模块的使用示例
Apr 11 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
三步实现Django Paginator分页的方法
Jun 11 Python
Python 画出来六维图
Jul 26 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
python之生成多层json结构的实现
Feb 27 Python
Python短信轰炸的代码
Mar 25 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
python os.listdir()乱码解决方案
Jan 31 Python
python切片作为占位符使用实例讲解
Feb 17 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 #Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 #Python
基于django ManyToMany 使用的注意事项详解
Aug 09 #Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 #Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 #Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 #Python
python操作excel让工作自动化
Aug 09 #Python
You might like
php下实现农历日历的代码
2007/03/07 PHP
php 静态化实现代码
2009/03/20 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
jQuery each()小议
2010/03/18 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
Angular ElementRef简介及其使用
2018/10/01 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
Python绘制3D图形
2018/05/03 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
html5唤起app的方法
2017/11/30 HTML / CSS
材料物理专业个人求职信
2013/12/15 职场文书
捐款感谢信
2015/01/20 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
酒店员工手册范本
2015/05/14 职场文书
企业文化学习心得体会
2016/01/21 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书