小编tea*_*-rf的帖子

缓存或预取Django的反向关系

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

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

def Book(models.Model):
  title = models.CharField()
  publisher = models.ForeignKey(Publisher)
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我希望显示某些发布商及其所有图书的列表.在我的视图功能中,我使用类似的东西来获取所需的发布者

publishers=Publisher.objects.filter(city='NY')
Run Code Online (Sandbox Code Playgroud)

然后在我看来,我迭代发布者和publishers.book_set.all之类的

{% for p in publishers %}
....
   {% for b in p.book_set.all %}
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但它显然会像数十亿次一样击中数据库.

我如何优化代码,以便django只能击中db一次或两次?

python django prefetch

2
推荐指数
1
解决办法
1168
查看次数

标签 统计

django ×1

prefetch ×1

python ×1