一、一对一映射
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. java多线程学习笔记(六)

    本节开始synchronized关键字的最后一部分内容: 静态同步方法synchronized方法与synchronized(class)代码块 关键字synchronized还可以用在static静 ...

  2. QTP使用Smtp协议发送邮件

    NameSpace = "http://schemas.microsoft.com/cdo/configuration/" Set Email = CreateObject(&qu ...

  3. 1.Jmeter 快速入门教程(一) - 认识jmeter和google插件

    Jmeter是免费开源的性能测试工具( 同时也可以用作功能测试,http协议debug工具 ).  在如今越来越注重知识产权的今天, 公司越来越不愿意冒着巨大的风险去使用盗版的商业性能测试工具. 但如 ...

  4. .net分页方法

    .net分页方法 //记录分页的总条数 DX.Model.Container.PagerDataContainer Container = new DX.Model.Container.PagerDa ...

  5. Vue.use

    不管是对象还是函数install 是Vue.use()必须要有的方法 否则无法使用(Vue.use(MintUI))但axios 不需要Vue.use(axios) 可以直接使用 因为axios没有i ...

  6. Springboot01-web

    Springboot快速构建 访问http://start.spring.io 构建springboot项目,这里选择版本2.0.4 单击Generate Project按钮下载springboot ...

  7. ArcGIS 面要素缝隙孔洞检查代码 C# GP

    public class PolygonGapChecker : CheckProgressMessageSender, IChecker, ICheckProgressChangeEvent { p ...

  8. python基础类型(字典:dict)

    字典的介绍: 字典(dict)Python中唯一的一个映射类型.他是以{}括起来的键值对组成,在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存到这 ...

  9. config maven in intellij IDEA

    Config maven in IDEA                 File ->Settings->Build,Execution.Deployment->build Too ...

  10. 2018-8-10-win10-uwp-httpClient-登陆CSDN

    title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...