1.一对一映射
1.语法
在关联的两个类中的任何一个类都可以增加对另一个类的引用
属性 = models.OneToOneField(Entry)
ex:
class Author(models.Model):
.... ....
class Wife(models.Model):
.... ....
#增加对Author的一对一引用
author = models.OneToOneField(Author)
在数据库中:
会生成一个外键(author_id)列在 wife 表中,会引用在 author 表的主键
在 Author 中:
增加一个隐式属性 - wife,来表示author所对应的wife(其实就是反向引用属性)
2.查询
1.正向查询 :通过 Wife 找 Author
特点:通过自定义的关联属性查找对应实体
wife = Wife.objects.get(id=1)
author = wife.author
2.反向查询 :通过 Author 找 Wife
特点:通过反向引用属性查找对应的实体
author = Author.objects.get(id=1)
wife = author.wife
2.一对多映射
1.语法
在"多"表中增加对"一"表的外键引用,在"多"实体中增加对"一"实体的引用
在 "多" 实体中增加:
属性 = models.ForeignKey(Entry)
ex: Book(多) 和 Publisher(一)
class Book(models.Model)
... ...
publisher = models.ForeignKey(Publisher)
数据库中体现:
Book 表中 增加一个外键列 publisher_id ,引用自 Publisher 表中的主键
在实体类中的:
1.Book 中会有一个 publisher 属性 来表示对应的 Publisher 的对象
2.Publisher 中会有一个隐式属性 - book_set,用来表示该 publisher 对应的所有的 Book 对象的查询。
3.多对多映射
1.语法
在关联的两个类的任意一个类中,增加:
属性 = models.ManyToManyField(Entry)
ex: Author 与 Book 可以是多对多关联关系
1位Author可以出版多本Book
1本Book可以由多位Author联合编写
class Author(models.Model)
.... ....
class Book(models.Model):
... ...
authors = models.ManyToManyField(Author)
正向引用:在 Book 中通过 authors 来表示对应的所有的书籍的查询
反向引用:在 Author 中通过 book_set 来表示对应的所有的作者们的查询