3
def mysearch(request):
"""This view builds a Q object query based on which fields are filled."""
if 'submit' in request.POST:
# build Q object depending on fields submitted
q = Q()
if request.POST['first_field']:
q &= Q(firstfield__icontains = request.POST['first_field'])
...
if request.POST['sixth_field']:
q &= Q(sixthfield__icontains = request.POST['sixth_field'])
results_list = MyModel.objects.filter(q)
count = len(results_list)
# store results
request.session['results_list'] = results_list
request.session['count'] = count
# 'p' is an arbitrary marker to detonate pagination of a page other than 1
if 'p' in request.GET:
results_list = request.session['results_list']
count = request.session['count']
if count and count > 0:
...
# pagination code
...
else:
pass
return render_to_response('search_results.html',
locals(), context_instance=RequestContext(request))
所有在我的模板使用paginator運作良好。問題在於,Django調試工具欄告訴我,在頁面> 1時,我的數據庫訪問次數與我在第一頁上的次數相同。爲什麼是這樣?事實上 - 爲什麼它打到數據庫呢?整個results_list
不應該從request.session
被拉?任何建議非常感謝。Django - 在request.session中存儲queryset仍然查詢db - 爲什麼?
偉大的建議。謝謝。此外 - 我不知道會話數據默認保存到數據庫。 – 2012-01-05 00:29:08
您可以將會話存儲移動到memcached中,只要您的服務器上有足夠的RAM,它就會將數據從數據庫中移出並提高性能。你正在爲了性能而犧牲運營複雜性。 – Leopd 2012-01-06 18:12:16