Django(part35)--多對多映射

學習筆記,僅供參考



數據表關聯關係映射


多對多映射


多對多表現了對象之間多對多的複雜關係,如: 每個人都有不同的學校(小學,初中,高中,…),每個學校都有不同的學生。


  • 語法
#在關聯的兩個類中的任意一個類中,增加:
屬性 = 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到王老師名下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章