Django進階Model篇006 - 多表關聯查詢


接着前面的例子,舉例多表查詢實例如下:

1.查詢作戰的所有完整信息。

>>> AuthorDetail.objects.values('sex','email','address','birthday','author__name')

2.查詢《持續集成實踐》這本書的作者姓名,還有出版社的名字

>>> Book.objects.filter(title='持續集成實踐').values('authors__name','publisher__name')

3.查詢潘曉明寫了一些什么書

>>> Book.objects.filter(authors__name='潘曉明').values('title')

4.查詢機械工業出版社都出版了一些什么書籍

>>> Book.objects.filter(publisher__name='機械工業出版社').values('title')
>>> publisher = Publisher.objects.get(name='機械工業出版社')
>>> publisher.book_set.all().values('title')

5.查詢機械工業出版社都有哪些作者出過書

>>> Book.objects.filter(publisher__name='機械工業出版社').values('title','authors__name')

 

多表查詢技巧:

__:兩個下划線可以生成連接查詢,查詢關聯的字段信息

_set:提供了對象訪問相關聯表數據的方法。但這種方法只能是相關類訪問定義了關系的類(主鍵類訪問外鍵類)。

 

ManyToMany

多對多之查詢:

正向查詢:查詢書籍id=1的所有作者

b1=Book.objects.get(id=1)
b1.authors.all()

反向查詢:查詢id=3的作者所出版的所有書籍

a1=Author.objects.get(id=3)
a1.book_set.all()

正向聯表查詢:查詢書籍id=1的所有作者

Book.objects.filter(id=1).values('authors__name')

反向聯表查詢:查詢id=3的作者所出版的所有書籍

Author.objects.filter(id=3).values('book__title')

多對多添加:

正向添加:

b1=Book.objects.get(id=1)
a1=Author.objects.get(id=2)
b1.authors.add(a1)   #可以直接添加obj
b1.authors.add(3)    #可以直接添加id

au_list=Author.objects.all()
b1.authors.add(*au_list) #可以直接添加obj列表
b1.authors.add(*[1,2,3]) #可以直接添加id列表

反向添加:

a2=Author.objects.get(id=1)
b2=Book.objects.get(id=2)
a2.book_set.add(b2)
a2.book_set.add(3)

a2.book_set.add(*Book.objects.all())
a2.book_set.add(*[1,2,3,4])

多對多刪除:

多對多的刪除有兩個參數:

  • clear() 清空數據
  • remove() 刪除數據

正向刪除:

# 刪除id=1的書籍的所有作者
b1=Book.objects.get(id=1)
b1.authors.clear()   

# 刪除id=2的書籍的作者id=1,2,5
b2=Book.objects.get(id=2)
b2.authors.remove(1)
b2.authors.remove(*[2,5]) 

反向刪除:

# 刪除作者id=1的所有書籍
a1=Author.objects.get(id=1)
a1.book_set.clear()

 


***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM