使用自关联方法处理多表关系
使用自关联方法处理多表关系
这里通过省市区之间的关系来解释自关联的情况
在设置地址的过程中 , 不可避免的需要设置 , 省份 ,市以及区
而省市区三者之间的具有一定的关联关系
一个省份对应多个市
一个市对应多个区
如果通过设置主表从表关系则需要设置三张标分别对应省市区 , 这对数据处查询造成了很大的压力
所以我们在这里使用自关联的方法使用一张表来解决上述问题
# 自关联
# id name -id
# 1 广东省 null
# 2 湖北省
# 3 广州市 1
# 4 天河区 3
如上述 , 广州市为广东省的一个市 , 则可以为其设置一个外键 , 外键的值与广东省即主键相同
同理天河区为广州市的一个区 , 我们也可以按上述方法进行设置
这样我们在调用查询的过程中就可以通过从键获得省市区之间的对应关系
在Django中的ORM数据库框架如何设置自关联
class Area(models.Model):name = models.CharField(max_length=20)# 自关联 : self# SET_NULL: 删除被关联的数据 , 对应链接的数据字段值会设置为 NULLparent = models.ForeignKey('self' , on_delete=models.SET_NULL , null=True,blank=True,related_name='subs')class Meta:db_table = 'areas'
在Django的模型(models)定义中,ForeignKey 是一个用于表示两个模型之间一对多关系的字段。在你给出的代码片段中,ForeignKey 被用于一个模型自身,即所谓的“自引用”或“递归”关系。让我们逐一分析该字段的各个参数:
python复制代码parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='subs')
- ‘self’:
- 这表示
ForeignKey指向的是同一个模型(即该模型自身)。在数据库中,这意味着该表会有一个外键字段,该字段引用该表的另一个记录。
- 这表示
- on_delete=models.SET_NULL:
- 当被引用的对象(即父对象)被删除时,该字段的值将被设置为
NULL。这是Django提供的一种处理外键对象删除时的策略。 - 注意:为了使用
SET_NULL,相应的字段(在这个例子中是parent)必须允许NULL值,这就是为什么null=True也被设置的原因。
- 当被引用的对象(即父对象)被删除时,该字段的值将被设置为
- null=True:
- 这表示该字段在数据库中可以为
NULL。由于这是一个ForeignKey,当没有关联的父对象时,这个字段可能会是NULL。
- 这表示该字段在数据库中可以为
- blank=True:
- 在Django的表单验证中,
blank=True表示该字段在表单中可以为空(即用户可以不填写该字段)。但是,对于ForeignKey字段,blank通常与表单的验证相关,而不是数据库层面的。在数据库层面,它是否可以为空是由null参数决定的。但在Django的admin或自定义表单中,你可能会想允许用户不填写这个字段,这时blank=True就很有用了。
- 在Django的表单验证中,
- related_name=‘subs’:
- 这为反向关系提供了一个名字。默认情况下,如果你有一个名为
MyModel的模型,并且它有一个指向自身的ForeignKey,那么你可以通过my_model_instance.mymodel_set.all()来获取与该实例相关的所有子对象。但是,通过设置related_name='subs',你可以通过my_model_instance.subs.all()来获取这些子对象,这使得代码更加清晰和易读。
- 这为反向关系提供了一个名字。默认情况下,如果你有一个名为
综上所述,这个ForeignKey字段定义了一个模型与其自身之间的递归关系,允许模型实例有一个父实例(或没有),并提供了在父实例被删除时如何处理该关系的策略。同时,它还为反向关系提供了一个易于理解和使用的名字。
相关文章:
使用自关联方法处理多表关系
使用自关联方法处理多表关系 这里通过省市区之间的关系来解释自关联的情况 在设置地址的过程中 , 不可避免的需要设置 , 省份 ,市以及区 而省市区三者之间的具有一定的关联关系 一个省份对应多个市 一个市对应多个区 如果通过设置主表从表关系则需要设置三张标分别对应省…...
annaconda详细解读换源文件
annaconda换源详细解读文件 annaconda换源详细解读文件 annaconda换源详细解读文件 #踩坑/annaconda换源详细解读通道问题 如何准确使用国内源高效安装GPU版本的Pytorch - 知乎 文件中的custom通道,需要自己手动添加到默认通道里面,记得后面更上/包名…...
AI大模型系列:编写高质量提示(prompt)的实践技巧
AI大模型系列专栏 文章收录于AI大模型系列专栏 文明基石,文字与数字的起源与演变自然语言处理,从规则到统计的演变AI魔法师,提示工程的力量编写高质量提示(prompt)的小技巧编写高质量提示(prompt…...
汽车EDI:安通林Antolin EDI 项目案例
安通林(Antolin)是一家全球性的汽车零部件制造商,专注于汽车内饰系统和零部件的生产,致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统,使得双方能够通过EDI传输业务单据,极大提…...
今日arXiv最热NLP大模型论文:揭露大语言模型短板,北京大学提出事件推理测试基准
人工智能领域又一里程碑时刻!北京大学、北京智源人工智能研究院等机构联合推出大型事件推理评测基准 。这是首个同时在知识和推理层面全面评估大模型事件推理能力的数据集。 总所周知,事件推理需要丰富的事件知识和强大的推理能力,涉及多种推…...
windows系统安装Ubuntu子系统
安装前先在 控制面板 中打开 程序与功能选项 ,点击 启用或关闭Windows功能: 勾选 适用于 Linux的Windows子系统 和 虚拟机平台 、 Hyper-v 。 重启电脑后再 Microsoft Store Windows应用商店 中下载合适的Ubuntu版本。 运行Ubuntu程序,如出现…...
电脑复制和粘贴的时候会出现Hello!
电脑不管是Microsoft Excel还是Microsoft Word复制之后粘贴过来就出现HELLO,当复制粘贴文件的时候就会出现WINFILE; 具体现象看下面两个图片: 这是因为winfile 文件病毒(幽灵蠕虫病毒),每月的28号发作; 症状…...
AI新视界:探索Baidu Comate的前沿科技
前言 Baidu Comate(智能代码助手)是基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,打造的新一代编码辅助工具。拥有代码智能、场景丰富、创造价值、广泛应用等多重产品优势,可实现“帮你想、帮…...
唐山知识付费系统搭建教程,女性创业难吗?2017十佳女性创业故事:黑科技创业“女神”
女性创业难吗?2017十佳女性创业故事:黑科技创业“女神”!创业似乎一直是一个比较热门的话题,女性创业也是一个很有争议的问题。女性创业难吗?看看2017十佳女性创业故事:黑科技创业“女神”。 阿里研究院、中国企业家木兰汇、阿里巴巴创新中…...
Hotcoin Research | 模块化将是大势所趋:拆解模块化区块链的现状和未来
关于模块化区块链叙事的讨论源于Celestia和其代币TIA的亮眼表现。实际上,模块化是未来区块链设计的主要发展方向和大势所趋。模块化区块链就像乐高积木一样,将区块链系统拆分为可重用的模块,通过定制组合可实现不同功能的区块链网络。这种灵活…...
Unity VR在编辑器下开启Quest3透视(PassThrough)功能
现在有个需求是PC端串流在某些特定时候需要开启透视。我研究了两天发现一些坑,记录一下方便查阅,也给没踩坑的朋友一些思路方案。 先说结论,如果要打PC端或者在Unity编辑器中开启,那么OpenXR当前是不行的可能还需要一个长期的过程,必须需要切换到Oculus。当然Unity官方指…...
使用 git rebase 还是 git merge,优缺点
在开发过程中使用 git rebase 还是 git merge,优缺点分别是什么? - 知乎 看一下gerrit的模式 永远rebase 绝对禁用merge 每一个commit都是一个完整的功能 保持清晰直观的提交历史 所以,main 分支是万万不能使用 rebase 的!&#…...
李飞飞团队 AI4S 最新洞察:16 项创新技术汇总,覆盖生物/材料/医疗/问诊……
不久前,斯坦福大学 Human-Center Artificial Intelligence (HAI) 研究中心重磅发布了《2024年人工智能指数报告》。 作为斯坦福 HAI 的第七部力作,这份报告长达 502 页,全面追踪了 2023 年全球人工智能的发展趋势。相比往年,扩大了…...
springboot整合rabbitmq的不同工作模式理解
前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…...
Ansible(二)
一、Playbook基础 1.1 Playbook定义 Playbook其实是Ansible服务的一个配置文件,Ansible使用Playbook的YAML语言配置编写成操作需求,实现对远端主机或策略部署,实现对远端主机的控制与管理。 1.2 Playbook组成 Tasks:任务&…...
【linux】linux工具使用
这一章完全可以和前两篇文件归类在一起,可以选择放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了,抱歉,让我偷了会懒 1. 自动化构建工具 make , makefile make 是一个命令,makefile 是一个文件&…...
Docker需要代理下载镜像
systemctl status docker查看docker的状态和配置文件是/usr/lib/systemd/system/docker.service vi /usr/lib/systemd/system/docker.service, 增加如下配置项 [Service] Environment"HTTP_PROXYhttp://proxy.example.com:8080" "HTTPS_PROXYhttp:…...
Debian操作系统简史
一,起源和初衷 Debian项目始于1993年,由Ian Murdock发起,他当时是普渡大学的一名学生。Debian的名字来源于Ian Murdock和他的妻子Debra的组合。Debian的核心理念是创建一个完全自由的操作系统,它遵循严格的自由软件指导原则。 二…...
课堂练习——路由策略
需求:将1.1.1.0/24网段重发布到网络中,不允许出现次优路径,实现全网可达。 在R1上重发布1.1.1.0/24网段,但是需要过滤192.168.12.0/24和192.168.13.0/24在R2和R3上执行双向重发布 因为R1引入的域外路由信息的优先级为150ÿ…...
Agent AI智能体:未来社会的角色、发展与挑战
Agent AI智能体在未来社会中的角色、发展路径以及可能带来的挑战是一个非常值得关注的话题。让我们来深入探讨一下这些方面。 1. 角色与应用场景 Agent AI智能体是指具有自主决策能力和执行能力的人工智能系统,它们可以代表个人或组织执行各种任务和活动。在未来社…...
Vue 项目中 vis-network 点击节点不生效的问题排查:外层 transform 缩放导致坐标偏移
最近在 Vue3 项目中把一个原生 HTML 版知识图谱迁移成 Vue 组件。原始 HTML 使用 vis-network 实现节点关系图,点击节点可以正常展开下一级。但迁移到 Vue 项目后,图谱可以正常渲染,节点、连线、布局都没有问题,唯独点击节点时无法…...
告别手动更新!用Python脚本+Excel表格批量修改UG零件参数(NX2007实战)
告别手动更新!用Python脚本Excel表格批量修改UG零件参数(NX2007实战) 在工业设计领域,UG NX作为主流的三维建模软件,其参数化设计能力直接影响产品迭代效率。传统手动修改模型参数的方式不仅耗时费力,还容易…...
别再用理想模型了!用TINA-TI仿真μA741驱动容性负载,实测振铃现象与消除方案
别再用理想模型了!用TINA-TI仿真μA741驱动容性负载,实测振铃现象与消除方案 在模拟电路设计中,运放驱动容性负载时的稳定性问题堪称工程师的"头号公敌"。许多初学者在仿真阶段使用理想模型验证电路功能时一切正常,却在…...
明日方舟自动化助手MAA:3步解放双手,让游戏回归乐趣
明日方舟自动化助手MAA:3步解放双手,让游戏回归乐趣 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: ht…...
DeepSeek LeetCode 2503.矩阵查询可获得的最大分数 Go实现
以下是 LeetCode 2503 的 Go 实现,使用优先队列 排序 离线查询的思路:go import ("container/heap""sort" )type Cell struct {val intr intc int }// 最小堆实现 type MinHeap []Cellfunc (h MinHeap) Len() int {…...
如何无限期免费使用IDM:智能试用期重置完整指南
如何无限期免费使用IDM:智能试用期重置完整指南 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否为Internet Download Manager(IDM)的30天试…...
基于雪崩晶体管设计2ns快速边沿脉冲发生器:原理、实现与调试
1. 项目概述与核心价值在射频、高速数字电路测试,甚至是核物理、激光雷达的前沿实验中,我们常常会遇到一个令人头疼的问题:市面上能买到的标准脉冲信号源,其输出脉冲的上升时间(Rise Time)往往在几十纳秒甚…...
从芯片到系统:手把手拆解汽车MCU里的安全硬件(SHE/HSE)与独立HSM如何协作
汽车MCU安全架构实战:SHE/HSE与独立HSM的协同设计指南 当一辆现代汽车启动时,从车门解锁到发动机控制,超过1亿行代码在数百个微控制器(MCU)上同时运行。这些代码中包含着价值连城的数字资产——车主的生物特征数据、自…...
Perplexity本地化查询实战:手把手教你用Ollama+Llama3构建离线知识库(含性能压测数据)
更多请点击: https://intelliparadigm.com 第一章:Perplexity本地服务查询 Perplexity 本地服务查询是指在不依赖云端 API 的前提下,通过本地部署的模型与推理服务(如 Ollama、LM Studio 或 Text Generation WebUI)完…...
Spring AI 快速对接 AI 大模型(开箱即用)
一、项目准备(最简依赖)1. 创建 Spring Boot 项目推荐版本:Spring Boot 3.2.x JDK 版本:172. pom.xml 核心依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…...
