2

考虑一个带有 Publishers 表和 Books 表的 shema,这样

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 只访问 db 一次或两次?

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 回答