缓存或预取 Django 的反向关系



考虑带有出版商表和书籍表的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.book_set.ly

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

这是按预期工作的,除了它显然像数十亿次一样击中了DB。

如何优化代码,以使Django仅击中DB一次或两次?

在django 1.4 中,使用 prefetch_related

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

在django< 1.4中,使用django-batch-select。

最新更新