鉴于以下代码,我想使用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})
答案 0 :(得分:2)
使用prefetch_related
预取多重关系中的任何项目(多对多关系或反向外键关系)。
items = Blog.objects.order_by('-pub_date').prefetch_related('blogimage_set')[:6]
这会将所有博客的查询量减少到2,1,并且对于与任何博客相关的所有图像都会减少1。