2013-02-05 63 views
1
class Book(models.Model): 
    # fields 

class Chapter(models.Model): 
    book = models.ForeignKey(Book) 

class Page(models.Model): 
    chapter = models.ForeignKey(Chapter) 

如果我想知道該特定書籍「A」中的頁面數,那麼實現此目的的最佳方法是什麼?在Django中,我如何獲得超過兩個模型的聚合數據

當然,我可以在書A的章節循環,並總結每章的頁面,但我不認爲是更聰明的方式。

有沒有辦法通過ORM/Queryset來做到這一點?某種聚合?

回答

3

像這樣的東西可以工作:

book_a = Book.objects.get(name='A') 
page_count = Page.objects.filter(chapter__book=book_a).count() 

這將導致數據庫聯接,這將返回其章是從書A.

+0

簡單明瞭,thx – apelliciari

1

嘗試類似的頁面數:

from django.db.models import Count 

page_count = Book.objects.filter(name='A').annotate(Count(chapter__pages)) 

結果應該在page_count[0].chapter__pages__count。查看documentation瞭解更多信息。