我有一个关于Django分页的问题。当我尝试分页超过20万条记录时,网站加载非常慢(>10秒),而且我应该使用大约200万条记录。
我在Stackoverflow或其他网站上找不到针对此问题的好解决方法。每次代码获取页面时,它都会执行QuerySet,这需要处理一个非常大的数据集,使其变得缓慢。
有人知道应该怎么做吗?我已经到处搜索了,但无法解决这个问题。以下是分页代码。Paper_list是:model.object.all().filter(category=x)(现在大约有20万个对象(它们都属于该类别)。
def paginate_context(paper_list, request, context, source, author, title, term, date):
num_papers = len(paper_list)
paginator = Paginator(paper_list, 4) # Show X papers per page
page = request.GET.get('page')
try:
papers = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
papers = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
papers = paginator.page(paginator.num_pages)
context['papers'] = papers
context['num_papers'] = num_papers
context['query_cat'] = create_request_str_and(context['cat'], source, author, title, term, date)
EXPLAIN SELECT
吗?也许将category
字段转换为ForeignKey
值得一试,但这只是一个猜测。 - Alex Morozov