學習筆記,僅供參考
數據表關聯關係映射
多對多映射
多對多表現了對象之間多對多的複雜關係,如: 每個人都有不同的學校(小學,初中,高中,…),每個學校都有不同的學生。
- 語法
#在關聯的兩個類中的任意一個類中,增加:
屬性 = models.ManyToManyField(Entry)
- 示例
#一個作者可以出版多本圖書
#一本圖書可以被多名作者同時編寫
class Author(models.Model):
name = models.CharField('作家', max_length=50)
class Book(models.Model):
title = models.CharField('書名', max_length=50)
authors = models.ManyToManyField(Author)
查詢
- 通過 book 查詢對應的所有的 authors
#可以通過authors表示對應所有Author的查詢對象
book.authors.all()
#獲取 book 對應的所有的author的信息
book.authors.filter(age__gt=50)
#獲取book對應的author中年齡大於50歲的作者的信息
- 通過 author 查詢對應的所有的books
#author會生成一個屬性 book_set 用於對book查詢對象進行相關操作
author.book_set.all()
author.book_set.filter()
author.book_set.create(...) # 創建新書並聯作用author
author.book_set.add(book) # 添加已有的書爲當前作者author
author.book_set.clear() # 刪除author所有並聯的書
author.book_set.remove() # 刪除所author所有並聯的書
添加數據
from bookstore import models
author1 = models.Author.objects.create(name='黃老師')
author2 = models.Author.objects.create(name='王老師')
book1 = author1.book_set.create(title="Python")
#創建新書並關聯黃老師
author2.book_set.add(book1)
#添加Python到王老師名下