如何优化这种向后相关的对象查询? (django的)

时间:2014-03-06 23:10:49

标签: django django-queryset

鉴于以下代码,我想使用here所述的向后查询获取最新的6个博客。对于这些博客中的每一个,我都需要获取相关的照片。

有7个查询运行来完成此操作,看起来很多。有什么方法可以优化它吗?

class Blog(models.Model):
    title = models.CharField(max_length="150")
    pub_date = models.DateTimeField('Date published', null=True, blank=True)

class BlogImage(models.Model):
    image = models.ImageField(upload_to='img')
    parent_blog = models.ForeignKey(Blog)

items = Blog.objects.order_by('-pub_date')[:6]

my_list = list()
for item in items:
    tup = (item,item.blogimage_set.all())
    my_list.append(tup)

return  render(request, 'template.html',{'items': my_list})

1 个答案:

答案 0 :(得分:2)

使用prefetch_related预取多重关系中的任何项目(多对多关系或反向外键关系)。

items = Blog.objects.order_by('-pub_date').prefetch_related('blogimage_set')[:6]

这会将所有博客的查询量减少到2,1,并且对于与任何博客相关的所有图像都会减少1。

Documentation