2

Publishers テーブルと Books テーブルを持つスキーマを考えてみましょう。

def Publisher(models.Model):
  city = models.CharField()
  ...

def Book(models.Model):
  title = models.CharField()
  publisher = models.ForeignKey(Publisher)

私のテンプレートでは、特定の出版社とそのすべての書籍のリストを表示したいと考えています。私のビュー関数では、次のようなもので目的のパブリッシャーをフェッチします

publishers=Publisher.objects.filter(city='NY')

次に、私の見解では、publishers と publishers.book_set.all を次のように反復処理します。

{% for p in publishers %}
....
   {% for b in p.book_set.all %}

これは期待どおりに機能しますが、明らかにデータベースに無数の回数ヒットします。

djangoがデータベースに1回または2回しかヒットしないようにコードを最適化するにはどうすればよいですか?

4

1 に答える 1

7

Django 1.4 以降では、使用prefetch_related

Publisher.objects.filter(city='NY').prefetch_related('book_set')

Django <1.4 では、django-batch-select を使用します。

于 2012-10-23T15:19:15.323 に答える