1
class Book(models.Model):
    # fields

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

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

その特定の本「A」のページ数を知りたい場合、これを達成するための最良の方法は何ですか?

もちろん、ブック A の章を循環させて、各章のページを合計することもできますが、それが賢明な方法だとは思いません。

ORM / クエリセットを介してこれを行う方法はありますか? ある種の集約?

4

2 に答える 2

3

このようなものはうまくいくかもしれません:

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

これにより、データベース結合が行われ、章が本 A からのものであるページの数が返されます。

于 2013-02-05T22:25:45.383 に答える
1

次のようなものを試してください:

from django.db.models import Count

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

結果は にあるはずですpage_count[0].chapter__pages__count。詳細については、ドキュメントを参照してください。

于 2013-02-05T23:09:08.527 に答える