数据库的级联删除
级联删除是指在数据库中删除一个对象时,与该对象有关的其他对象也被自动删除。在 Django 中,级联删除通常通过在模型中定义外键时使用 on_delete 参数来实现。以下是一些常见的 on_delete 选项:
1.models.CASCADE: 当关联的对象被删除时,删除包含外键的对象。这是级联删除的默认选项。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.CASCADE)
在这个例子中,如果删除与 OtherModel 关联的 MyUser 对象,相关的 OtherModel 对象也将被删除。
2.多级联删除: 如果你有多个模型之间存在多级关系,级联删除会依次传播。例如,如果有三个模型 A、B、C,A 与 B 有外键关系,B 与 C 有外键关系,如果删除 A,则 B 和 C 中相关的对象也会被删除。
class B(models.Model):a = models.ForeignKey(A, on_delete=models.CASCADE)class C(models.Model):b = models.ForeignKey(B, on_delete=models.CASCADE)
删除 A 对象时,与 A 关联的 B 对象也将被删除,进而与 B 关联的 C 对象也会被删除。
3.models.PROTECT: 防止删除关联的对象。如果试图删除关联的对象,将引发 ProtectedError 异常。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.PROTECT)
如果试图删除与 OtherModel 关联的 MyUser 对象,将引发 ProtectedError 异常,从而防止删除。
4.models.SET_NULL: 将外键设置为 NULL(仅适用于可为 NULL 的外键字段)。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.SET_NULL, null=True)
如果删除与 OtherModel 关联的 MyUser 对象,OtherModel 中的 user 外键将被设置为 NULL。
5.models.SET_DEFAULT: 将外键设置为默认值。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.SET_DEFAULT, default=default_user_id)
如果删除与 OtherModel 关联的 MyUser 对象,OtherModel 中的 user 外键将被设置为默认值。
models.SET: 将外键设置为指定的值。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.SET(set_user_id))
如果删除与 OtherModel 关联的 MyUser 对象,OtherModel 中的 user 外键将被设置为指定的值。
models.SET_NULL 和 models.SET_DEFAULT 的注意事项: 这两个选项只能用于可为 NULL 的外键字段。如果外键字段不可为 NULL,使用这两个选项将会引发 ValueError。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.SET_NULL, null=True) # 可以使用user = models.ForeignKey(MyUser, on_delete=models.SET_DEFAULT, default=default_user_id, null=True) # 可以使用user = models.ForeignKey(MyUser, on_delete=models.SET_NULL) # 会引发 ValueErroruser = models.ForeignKey(MyUser, on_delete=models.SET_DEFAULT, default=default_user_id) # 会引发 ValueError
6.models.DO_NOTHING: 什么也不做。删除关联的对象后,不对外键进行任何操作。
class OtherModel(models.Model):user = models.ForeignKey(MyUser, on_delete=models.DO_NOTHING)
使用这个选项时,你需要确保在数据库级别处理外键的完整性。这通常需要你手动管理外键的约束。
相关文章:
数据库的级联删除
级联删除是指在数据库中删除一个对象时,与该对象有关的其他对象也被自动删除。在 Django 中,级联删除通常通过在模型中定义外键时使用 on_delete 参数来实现。以下是一些常见的 on_delete 选项: 1.models.CASCADE: 当关联的对象被删除时&…...
【Python 千题 —— 基础篇】奇数列表
题目描述 题目描述 创建奇数列表。使用 for 循环创建一个包含 20 以内奇数的列表。 输入描述 无输入。 输出描述 输出创建的列表。 示例 示例 ① 输出: 创建的奇数列表为: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]代码讲解 下面是本题的代码: #…...
当npm下载库失败时可以用cnpm替代
下载cnpm npm install -g cnpm --registryhttp://registry.npmmirror.com 然后使用cnpm代替npm下载即可 cnpm install...
PyTorch多GPU训练时同步梯度是mean还是sum?
PyTorch 通过两种方式可以进行多GPU训练: DataParallel, DistributedDataParallel. 当使用DataParallel的时候, 梯度的计算结果和在单卡上跑是一样的, 对每个数据计算出来的梯度进行累加. 当使用DistributedDataParallel的时候, 每个卡单独计算梯度, 然后多卡的梯度再进行平均.…...
Spring Framework IoC依赖注入-按Bean类型注入
Spring Framework 作为一个领先的企业级开发框架,以其强大的依赖注入(Dependency Injection,DI)机制而闻名。DI使得开发者可以更加灵活地管理对象之间的关系,而不必过多关注对象的创建和组装。在Spring Framework中&am…...
IDEA运行thymeleaf的html文件打开端口为63342且连不上数据库
这边贴apple.html代码 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><title>User List</title> </head> <body> <h1>User List</h1> <table&…...
sql报错注入和联合注入
1.[NISACTF 2022]join-us 过滤: as IF rand() LEFT by updatesubstring handler union floor benchmark COLUMN UPDATE & sys.schema_auto_increment_columns && 11 database case AND right CAST FLOOR left updatexml DATABASES BENCHMARK BY sleep…...
028 - STM32学习笔记 - ADC结构体学习(二)
028 - STM32学习笔记 - 结构体学习(二) 上节对ADC基础知识进行了学习,这节在了解一下ADC相关的结构体。 一、ADC初始化结构体 在标准库函数中基本上对于外设都有一个初始化结构体xx_InitTypeDef(其中xx为外设名,例如…...
Pytest自动化测试框架:mark用法---测试用例分组执行
pytest中的mark: mark主要用于在测试用例/测试类中给用例打标记(只能使用已注册的标记名),实现测试分组功能,并能和其它插件配合设置测试方法执行顺序等。 如下图,现在需要只执行红色部分的测试方法,其它方法不执行&am…...
【TCP连接的状态】
linux查看tcp的状态命令: 1)、netstat -nat 查看TCP各个状态的数量 2)、lsof -i:port 可以检测到打开套接字的状况 3)、 sar -n SOCK 查看tcp创建的连接数 4)、tcpdump -iany tcp port 9000 对tcp端口为9000的进行抓包 查看占用端口…...
Node.js入门指南(一)
目录 Node.js入门 什么是Node.js Node.js的作用 Node.js安装 Node.js编码注意事项 Buffer(缓冲器) 定义 使用 fs模块 概念 文件写入 文件读取 文件移动与重命名 文件删除 文件夹操作 查看资源状态 路径问题 path模块 Node.js入门 什么是Node.js …...
使用Grpc实现高性能PHP RPC服务
文档:Quick start | PHP | gRPC 下面将介绍使用 Grpc 和 Protobuf 实现高性能 RPC 服务的具体步骤: 1. 安装 Grpc 和 Protobuf 首先需要安装 Grpc 和 Protobuf。可以从官网下载相应的安装包(Supported languages | gRPC)或通过…...
二、爬虫-爬取肯德基在北京的店铺地址
1、算法框架解释 针对这个案例,现在对爬虫的基础使用做总结如下: 1、算法框架 (1)设定传入参数 ~url: 当前整个页面的url:当前页面的网址 当前页面某个局部的url:打开检查 ~data:需要爬取数据的关键字&…...
linux驱动开发.之spi测试工具spidev_test源码(一)
同i2c-tools工具类似,spidev_test是用来测试SPI BUS的用户态程序,其源码存在kernel目录下的tools下,具体为tools\spi\spidev_test.c。buildroot同样也提供名为spidev_test的package,可以直接进行编译,方便用户调试spi总…...
基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码
基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于材料生成优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…...
Go——二、变量和数据类型
Go 一、Go语言中的变量和常量1、Go语言中变量的声明2、如何定义变量方式1:方式2:带类型方式3:类型推导方式定义变量方式4:声明多个变量总结 3、如何定义常量4、Const常量结合iota的使用 二、Golang的数据类型1、概述2、整型2.1 类…...
合并区间问题
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals [[1,…...
2023 年最新 MySQL 数据库 Windows 本地安装、Centos 服务器安装详细教程
MySQL 基本概述 MySQL是一个流行的关系型数据库管理系统(RDBMS),广泛应用于各种业务场景。它是由瑞典MySQL AB公司开发,后来被Sun Microsystems收购,最终被甲骨文公司(Oracle Corporation)收购…...
每天一道算法题(十)——获取和为k的子数组
文章目录 1、问题2、示例3、解决方法(1)方法1——双指针 总结 1、问题 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 2、示例 示例 1: 输入&#x…...
2023年亚太杯数学建模思路 - 案例:最短时间生产计划安排
文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…...
告别网页版!在Ubuntu 22.04上安装B站Linux客户端,弹幕体验更丝滑
在Ubuntu 22.04上部署B站原生客户端的完整指南 作为一个长期使用Ubuntu的B站深度用户,我深刻理解网页版在Linux环境下的种种不便——内存占用飙升、弹幕卡成PPT、全屏模式下的各种显示异常。直到发现GitHub上开源的Bilibili-Linux客户端,这些问题才真正…...
Rust跨平台应用开发:relic框架架构解析与实战指南
1. 项目概述:一个面向未来的跨平台应用构建方案最近在折腾一个个人项目,需要把同一个应用逻辑部署到桌面端、Web端,甚至未来可能还要上移动端。一开始想着用Electron,毕竟生态成熟,但一想到那动辄上百兆的安装包和不算…...
紧急通知:VSCode 2026.1已强制启用跨端调试安全沙箱,未升级launch.json将导致iOS真机调试失败——3步迁移指南+兼容性检测脚本立即下载
更多请点击: https://intelliparadigm.com 第一章:VSCode 2026 跨端调试增强案例 VSCode 2026 引入了原生跨端调试协议桥接层(Cross-Platform Debug Bridge, CPDB),支持在单个调试会话中无缝切换 Web、Electron、WSL2…...
ESP32-S3实现0.7秒手势识别:嵌入式AI实战指南
1. 项目概述在嵌入式AI领域,将深度学习模型部署到资源受限的微控制器上一直是个挑战。最近Ali Hassan Shah成功在ESP32-S3-EYE开发板上实现了基于ESP-DL库的手势识别系统,整个推理过程仅需0.7秒。这个项目展示了如何在边缘设备上运行自定义的卷积神经网络…...
开源免费的WPS AI 软件 察元AI文档助手:链路 035:executeAssistantTask 中 buildStructuredExecutionPlan 到 apply
链路 035:executeAssistantTask 中 buildStructuredExecutionPlan 到 apply 总体链路图 下图在全系列各篇保持一致,仅通过高亮样式标示本篇所覆盖的环节;箭头表示主成功路径,点线为异常或可选路径。阅读任意一篇时都应能回到本图…...
多视图优化技术在体素艺术生成中的应用与实践
1. 项目概述:当体素艺术遇上多视图优化去年为一个独立游戏项目制作3D角色时,我尝试了市面上所有主流体素生成工具,发现它们都存在一个通病——单视角生成的模型转到其他角度经常出现结构断裂或比例失调。这促使我开始研究如何将多视图优化技术…...
FramePack终极指南:5分钟学会AI舞蹈视频生成,6GB显存轻松创作
FramePack终极指南:5分钟学会AI舞蹈视频生成,6GB显存轻松创作 【免费下载链接】FramePack Lets make video diffusion practical! 项目地址: https://gitcode.com/gh_mirrors/fr/FramePack 你是否想过用AI技术创作惊艳的舞蹈视频,却苦…...
别再卡在Solving environment了!保姆级教程:用阿里云镜像源为CUDA 12.2快速安装PyTorch
深度学习环境搭建实战:用阿里云镜像源高效安装PyTorch与CUDA 12.2 刚接触深度学习的朋友们,十有八九会在环境搭建这一步卡壳。特别是当你在Anaconda里输入conda install pytorch后,盯着屏幕上那个仿佛永远转不完的"Solving environment&…...
LaTeX beamer新手避坑指南:从安装配置到生成第一份中文汇报PDF
LaTeX beamer实战手册:零障碍打造学术级中文演示文稿 第一次用LaTeX做学术汇报时,我盯着满屏的编译错误整整三小时——直到发现是因为中文字体路径包含空格。这种令人抓狂的体验,正是本文要帮你彻底避免的。不同于网上零散的配置教程&#x…...
【仅限信创白名单环境】:Docker Swarm在海光CPU集群上服务发现失效的etcd TLS握手调试实录(含国密SSL证书签发脚本)
更多请点击: https://intelliparadigm.com 第一章:Docker 国产化调试 在信创环境下推进 Docker 容器平台国产化适配,需重点解决镜像构建、运行时兼容性及安全策略三类核心问题。当前主流国产操作系统(如统信 UOS、麒麟 Kylin V1…...
