一、一对一映射
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 模型层关系映射的更多相关文章

  1. Django模型层之ORM

    Django模型层之ORM操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  2. Django模型层之单表操作

    Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  3. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  4. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  5. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  6. day 55 Django基础五之django模型层(一)单表操作

      Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...

  7. django 模型层(2)

    Django 模型层(2) 多表操作---模型之间的关系 1 一对一:作者----作者详细信息 2 一对多:书籍----出版社 3 多对多:书籍----作者 一  创建模型(主键(id)自动创建) 没 ...

  8. Django模型层(2)

    <!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...

  9. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

随机推荐

  1. svn设置文件提交过滤、svn设置classes文件提交

    在svn提交文件的时候为了避免一些不必要的文件也提交到资源库 像编译后的.class文件 第一步:在文件中右击打开设置, 第二步:找到全局忽略样式 第三步:修改要过滤的文件 设置过滤通配符 *clas ...

  2. appium报错及解决方案

    [已解决]mac上手动打开appium报错:“Could not find aapt Please set the ANDROID_HOME environment variable with the ...

  3. python+selenium+chromewebdriver或Firefox的环境搭建

    插件下载地址 chromewebdriver:https://chromedriver.storage.googleapis.com/index.html?path=2.26/放置在python下的S ...

  4. Java_3.Java帮助文档

    1.Oracle的在线帮助文档 http://docs.oracle.com/javase/8/docs/api 2.jdk源码内容(包含5个部分) [以下内容参考至:https://blog.csd ...

  5. ubuntu中下载pycharm并添加到桌面

    方法一:下载Pycharm与安装 下载地址:https://www.jetbrains.com/pycharm/ Pycharm专业版和社区版对大多数人来说差别不大,区别如下: 我们下载Linux的社 ...

  6. Linux Kernel中所應用的數據結構及演算法

    Linux Kernel中所應用的數據結構及演算法 Basic Data Structures and Algorithms in the Linux kernel Links are to the  ...

  7. 看FPGA面试题时见到被考到的几个逻辑电路

    8位 D触发器: module dff8(clk , reset, d, q); input clk; input reset; :] d; :] q; :] q; always @ (posedge ...

  8. vue - blog开发学习5

    基本功能和后台联调 1.首页的所有博客 因为是前后台都是本地开发,所以前端vue需要设置proxy:修改/config/index.js中的这个proxyTable proxyTable: { '/a ...

  9. 【转】优秀的Vue UI组件库

    原文来源:https://www.leixuesong.com/3342 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司 ...

  10. windows7下搭建robot framework环境

    第一步 安装python并设置环境变量 1.安装python: python下载地址https://www.python.org/,建议用2.7.x版本 2.设置环境变量: 方法如下所示  第二步 安 ...