Django——orm模块创建表关系

django orm中如何创建表关系

1. 表关系分析

表与表之间的关系: 一对多 多对多  一对一 没有关系
判断表关系的方法: 换位思考用4张表举例:  图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来专门存储作者与作者详情表是一对一   提示: 创建表关系  先将基表创建出来 然后再添加外键字段. 这里建表可以没有先后顺序, 不同于mysql中建立外键的创建表以及插入记录的先后顺序.

 

2. 建立表

book
idtitlepricepublish_id
1python从入门到入土123.121
2生蚝的吃法大全666.661
3说不是渣男本质其实就是444.442
author
idnameage
1jason84
2egon73
book2author
idbook_idauthor_id
111
212
322
433
publish
idnameadd
1北方出版社北京
2南方出版社南京
author2detail
idphoneinfo
180080088我喜欢跑步, 所以我是跑王
288888888我喜欢吃生蚝和装逼

 

3. 建立外键表关系基本语法

# django orm中建立表关系一对一:author_detail = models.OneToOneField(to='AuthorDetail')一对多:publish = models.ForeignKey(to='Publish')多对多:authors = models.ManyToManyField(to='Book')拓展: 还可以有另一种书写方式, 不过这种方式必须放在被关联的类后. 这里必须放在Publish定义之后publish = models.ForeignKey(to=Publish)# 特点和注意事项:1. 先建立基表最后再建立外键关系, 没有sql中建立外键必须先建立被关联表, 加入记录先插入被关联表这么一说, 直接建立就行.2. django 1.x版本无序指定级联更新级联删除, 默认会帮你指定.3. 一对多, 一对一无需在需要关联的字段后面加_id, 默认会帮你加. 例如: publish -> publish_id4. 一对多的表关系外键字段建立在多的一方5. 多对多的表关系无需类似于sql语句需要建立中间表, 会默认帮你创建虚拟的中间表6. 一对一, 多对多的表关系外键字段建立在查询频率较高的地方.

4. 在models.py中创建以上模型类

from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=255, verbose_name='书名')price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='价格')  # 总共八位 小数点后面占两位# 一. 建立一对多关系: 图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面"""如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id如果你自作聪明的加了_id那么orm还是会在后面继续加_id后面在定义ForeignKey的时候就不要自己加_id"""publish = models.ForeignKey(to='Publish')  # 默认就是与出版社表的主键字段做外键关联# 二. 建立多对多关系: 图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方"""authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系让orm自动帮你创建第三张关系表"""authors = models.ManyToManyField(to='Author')class Publish(models.Model):name = models.CharField(max_length=255, verbose_name='出版社名称')addr = models.CharField(max_length=255, verbose_name='出版社地址')class Author(models.Model):name = models.CharField(max_length=255, verbose_name='作者姓名')age = models.IntegerField(verbose_name='作者年龄')# 三. 建立一对一关系: 作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中"""OneToOneField也会自动给字段加_id后缀所以你也不要自作聪明的自己加_id"""author_detail = models.OneToOneField(to='AuthorDetail')class AuthorDetail(models.Model):phone = models.BigIntegerField(verbose_name='作者电话号码')addr = models.CharField(max_length=255, verbose_name='作者家庭住址')

django请求生命周期流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

振南技术干货集:研发版本乱到“妈不认”? Git!(1)

注解目录 1、关于 Git 1.1Git 今生 (Git 和 Linux 的生父都是 Linus,振南给你讲讲当初关于 Git 的爱恨情愁,其背后其实是开源与闭源两左阵营的明争暗斗。) 1.2Git的爆发 (Git 超越时代的分布式思想。振南再给你讲讲旧金山三个年轻人创办 GitHub&…

Java设计模式之访问者模式

目录 定义 结构 案例 优点 缺点 使用场景 扩展 分派 案例实现须知 动态分派 静态分派 双分派 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色…

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日,在第六届中国国际进口博览会上,普华永道发布企业数据资源会计处理一体化平台(英文名为Data Accounting Platform,简称DAP)。该产品以普华永道“五步法”数据资源入表路径为理论依据,依托多年来普华…

C语言编写函数将字符串逆序存放

文章目录 1-12题例题13例题13答案答案一答案二 1-12题 C语言基础例题1-3题-指针篇 C语言基础例题4-5题-二维数组篇 C语言基础例题6-7题-结构体篇 C语言基础例题8-9题-大作业篇 C语言基础例题10-11题-字符串、指针篇 C语言基础例题12题-链表篇 例题13 请编写一个函数 void re…

现在个人想上架微信小游戏已经这么难了吗...

点击上方亿元程序员关注和★星标 引言 大家好,最近我突然想起来我还有一款微信小游戏还没有上架,于是捣鼓了一天把游戏完善了一下,然后准备提交审核,却发现异常的艰难… 1.为什么难? 相信大家都大概知道&#xff0c…

分布式id生成数据库号段算法的golang实现

分布式id生成数据库号段算法的golang实现 介绍项目结构使用说明核心流程说明1. 定义id生成器结构体2. id生成器共有Monitor,GetOne, Close三个对外暴露的方法。3. 数据表结构 参与贡献 介绍 项目地址:gitee;github 本项目主要利用go语言(go1…

解决mac 下 docker-compose 不是命令

docker-compose docker: ‘compose’ is not a docker command #6569 解决方法: mkdir -p /usr/local/lib/docker ln -s /Applications/Docker.app/Contents/Resources/cli-plugins /usr/local/lib/docker/cli-plugins参考: https://github.com/docker/…

Qt中对Udp数据打包发送和接收

有些小伙伴对怎么对Udp的数据打包不太清楚。下面我举例说明。 比如我们要发送一个Person的数据。可以先用一个结构把Person的数据封装。 struct Person {QString name;int age; };下面是udp客户端和服务器端完整的代码例子。 #ifndef UDPCLIENT_H #define UDPCLIENT_H#includ…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024) 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议(ICAMCE 2024)将于2024年2月23-25日在中国▪长沙…

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接:https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码:lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式&#xf…

KafkaConsumer 消费逻辑

版本:kafka-clients-2.0.1.jar 之前想写个插件修改 kafkaConsumer 消费者的逻辑,根据 header 过滤一些消息。于是需要了解一下 kafkaConsumer 具体是如何拉取消费消息的,确认在消费之前过滤掉消息是否会有影响。 下面是相关的源码&#xff0…

GZ038 物联网应用开发赛题第1套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第1套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员…

【漏洞复现】BYTEVALUE智能流控路由器存在命令执行

【漏洞介绍】 百为智能流控路由器 /goform/webRead/open 路由的 ?path 参数存在有回显的命令注入漏洞。攻击者可通过该漏洞在服务器端执行命令,写入后门,获取服务器权限,从而获取路由器权限。 【指纹】 title”BYTEVALUE 智能流控路由器”…

151. 反转字符串中的单词

151. 反转字符串中的单词 原题链接:完成情况:解题思路:参考代码:错误经验吸取 原题链接: 151. 反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/description/ 完成情况: 解…

ai批量剪辑矩阵无人直播一站式托管系统源头技术开发

1.全店IP形象打造----剪辑 全店IP打造模式为场景组合,需要在每个场景内按照顺序分别上传短视频素材,会与选中的音乐、标题文案组合生成有逻辑顺序的视频。可调配标题字号大小、音频音量大小。如想要携带团购地址可设置POI。可开启团购引导动画、镜头转场…

AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀

文章目录 一、ChatGPT简介二、ChatGPT在产品经理工作中的应用1. 快速获取用户反馈2. 智能分析竞品3. 智能推荐产品4.分析市场趋势5.优化产品功能 三、总结与展望《AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀》亮点内容简介目录作者简介获取方式 随着人工智能…

梯度@等值线@梯度运算法则

文章目录 梯度点处梯度函数梯度梯度和方向导数的关系 等值线等值线法线和梯度三元函数梯度点处梯度函数梯度梯度长度等值面 梯度运算法则 梯度 梯度是一个与方向导数相关的概念,梯度本质上是向量,是由各个自变量的偏导数定义的向量;梯度通常充当方向导数(函数变化率)的最值的角…

火山引擎公共云·城市分享会:共享云经验,一起向未来

数智化时代的来临,不仅激发了行业对云计算的资源需求,也重构了云计算的技术架构及产品布局,给业务场景带来更多可能性,让云计算成为企业走向高效治理的一剂“良方”。随着业务的多样化、复杂化,企业应该如何借助云计算…

各种业务场景调用API代理的API接口教程(附带电商平台api接口商品详情数据接入示例)

API代理的API接口在各种业务场景中具有广泛的应用,本文将介绍哪些业务场景可以使用API代理的API接口,并提供详细的调用教程和代码演示,同时,我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

NAS 扩容简明指南:使用各种外设给 NAS 们扩容

说起来有趣,NAS 除了“不同设备共享存储”这个功能之外,最重要的功能就是为设备扩容,但是 NAS 自己的存储容量不够了,又该如何。 ​这篇文章分享下我目前使用外设给 NAS 扩容的思路,如何以相对低的成本来获取更大的容…