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))
ページテンプレートを使用しているすべてのテンプレートでうまく動作します。問題は、Djangoのデバッグツールバーは、最初のページよりも> 1のページでデータベースに同じ回数だけヒットしていることを示しています。どうしてこれなの?実際には、なぜそれはデータベースに全く当たらないのですか? request.session
からresults_list
全体を取り出すべきではありませんか?どんなアドバイスも感謝しています。Django - request.sessionにクエリーセットを格納しても、依然としてdbをクエリします - なぜですか?
大きなアドバイス。ありがとう。また、セッションデータがデフォルトでdbに保存されていることに気づいていませんでした。 –
セッション記憶域をmemcachedに移動することができます。これにより、サーバーに十分なRAMがある限り、データベースから負荷をシフトし、一般にパフォーマンスを向上させます。パフォーマンスのために操作上の複雑さを犠牲にしています。 – Leopd