Django 模型层关系映射
一、一对一映射
1、什么是一对一
A表中的一条记录只能与B表中的一条记录相关联
如:一夫一妻制
2、语法
允许在关联的两个类的任何一个类中 增加:
属性 = models.OneToOneField(Entry)
3、查询
class Wife(models.Model):
...
author=models.OneToOneField(Author)
1、正向查询:通过wife 找 author
wife = Wife.objects.get(id=1)
author = wife.author
2、反向查询:通过author 找 wife
wife 是Django通过OneToOneField在Author中默认增加的一个隐式属性
author=Author.objects.get(id=14)
wife = author.wife
二、一对多映射
1、什么是一对多
A表中的一条数据可以与B表中的多条数据关联
B表中的一条数据只能与A表中的一条数据关联
如:出版社(Publisher) 和 图书(Book)
商品类型(GoodsType) 和 商品(Goods)
2、在数据库中的体现
通过外键(ForeignKey)来体现一对多
在"多"表中增加外键(ForeignKey)对"一"表的主键进行引用
3、语法
使用外键(ForeignKey)
在"多"的实体中,增加:
属性=models.ForeignKey(Entry)
4、查询
Book(多) 和 Publisher(一)
class Book(models.Model):
...
publisher=models.ForeignKey(Publisher)
1、正向查询 - 通过Book查询Publisher
book = Book.objects.get(id=1)
publisher = book.publisher
2、反向查询 - 通过Publisher查询Book
Django会在 1 的实体中增加 关联对象_set 属性,用于查询 多 的数据
结合 Publisher 和 Book 之间关系 :在 Publisher实体中增加了一个 book_set 属性
publisher=Publisher.objects.get(id=1)
books = publisher.book_set.all()
三、多对多映射
1、什么是多对多
A表中的一条记录可以与B表中的任意多条记录匹配
B表中的一条记录可以与A表中的任意多条记录匹配
如:作者与书籍
2、在数据库中的体现
必须创建第三张表,关联涉及到的两张表数据
3、语法
允许在任何一个实体中增加操作:
entry = models.ManyToManyField(Entry)
4、查询
class Author(models.Model):
...
book = models.ManyToManyField(Book)
1、正向查询-通过Author查询所有的Book
author = Author.objects.get(id=1)
books = author.book.all()
2、反向查询-通过Book查询所有的Author
Django中 会在Book 实体中增加一个隐式属性 author_set
book = Book.objects.get(id=1)
authors = book.author_set.all()
Django 模型层关系映射的更多相关文章
- Django模型层之ORM
Django模型层之ORM操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- Django模型层之单表操作
Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 69 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...
- day 56 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 55 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...
- django 模型层(2)
Django 模型层(2) 多表操作---模型之间的关系 1 一对一:作者----作者详细信息 2 一对多:书籍----出版社 3 多对多:书籍----作者 一 创建模型(主键(id)自动创建) 没 ...
- Django模型层(2)
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
随机推荐
- Linear Regression and Gradient Descent (English version)
1.Problem and Loss Function Linear Regression is a Supervised Learning Algorithm with input matrix ...
- vue 中 element-ui 引入方式
目录 前言 全部引用 单个引用 前言 有时候只会使用到 Element-ui 的部分功能,为了减少文件体积建议使用分开引用,即只引用使用的功能. 注意:在main.js中使用部分引用的时候是 impo ...
- java反射(四)--反射与简单java类
一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简 ...
- 插件化框架解读之Class文件与Dex文件的结构(一)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 Class文件 Class文件是Java虚拟机定义并被其所识别的 ...
- Oracle学习笔记<3>
单值函数 1.函数的分类 Oracle数据库中函数分为两类: 1)单值函数 n条数据经过函数处理得到n条结果 例如:查询所有员工last_name,并以全部大写形式输出 2)多值函数(组函数) n条数 ...
- centos7 部署镜像仓库 harbor步骤详解
一.基础设置 1.1 安装vim.wget yum install -y vim wget 1.2 卸载home.扩大root 如果考虑镜像仓库是给研发团队使用,需要配置较大容量的,因为cento ...
- [转]Linux Shell编程入门
转自:http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的 ...
- C中进制, 原码, 反码与补码的简单用法
/** * 二进制 binary 如: 1010 * 八进制 octal 如: 070 * 十六进制 hexadecimal 如: 0x7f * * 1Byte = 8bits * 1WORD = 2 ...
- 案例:使用xml存储数据
HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Angular的一些常用命令
Angular的一些常用命令 cmd中创建项目: ng new taskmgr -si --style=scss //先不安装依赖,si 为skip install material需要scss样式的 ...