我有以下内容:
#models:py
class Author(models.Model):
name = models.CharField(max_length=20)
class Book(models.Model):
author = ForeignKey(Author)
title = models.CharField(max_length=20)
class Comment(models.Model):
book = ForeignKey(book)
title = models.CharField(max_length=20)
#views.py
class AuthorBookComment(ListView):
model = Author
paginate_by = 5
template = “template.html”
#template.html
{% for author in object_list %}
<h2>{{ author.name }}</h2>
{% for book in author.book_set.all %}
<h3>{{book.title}}</h3>
{% for comment in book.comment_set.all %}
{{comment.title}}<br/>
{% endfor %}
{% endfor %}
{% endfor %}
<<pagination code>>
想法是显示所有作者及其著作和评论(如果有的话)。
挑战: 1.随着数据量增加(SQL请求数= n + 1),性能下降。 2.关于作者集与作者+书+评论集的分页。
问题:如何改善/优化上述内容?
我尝试过各种版本的select_related()和prefetch_related()。返回以下结果,但仍不能提供足够的性能+大数据集。有没有更好的办法?
查询,TimeMs:查询集
230、106:Author.objects.all()
229、105:Author.objects.all()。prefetch_related(book_set')。all()
179、88:Author.objects.all()。prefetch_related('book_set__comment_set')。all()