Django models里的关系映射
Posted hooo-1102
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django models里的关系映射相关的知识,希望对你有一定的参考价值。
一、一对一映射
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 models里的关系映射的主要内容,如果未能解决你的问题,请参考以下文章
Django框架MySQL数据库到models模型的映射关系