私がこれらを持っているとしましょう:
class Publication(models.Model):
title = models.CharField(max_length=128)
author = models.ManyToManyField(Author, through='Authorship')
class Author(models.Model):
first_name = models.CharField(db_index=True, max_length=64)
last_name = models.CharField(db_index=True, max_length=64)
1 つのクエリですべての出版物とその著者を取得するにはどうすればよいですか。各出版物とその著者を 1 つのページに一覧表示したいと考えています。しかし、すべての出版物について著者のテーブルにアクセスしたくはありません。
私が知っている唯一の方法はselect_related
、ビューとauthorship_set.all()
テンプレートを使用することです。しかし、それはすべてのパブリケーションに対して 1 つのクエリです。私は生のSQLで簡単にそれを行うことができましたが、それは厄介です.
*ところで、私はスルー モデルを使用していauthor_display_order
ます。
編集:
authorship_set
すべてのクエリを実行していたことが判明しました。
コンソールからこの方法で実行すると、1 つのクエリのみが起動されます。
pubs = Publication.objects.all().prefetch_related('author')
for p in pubs:
print p.title
for a in p.author.all():
print a.last_name