2

セッションに大きなクエリセットを保存する際に問題があります。このクエリセットは検索からのものであり、すべての結果内にページネーション用に保存する必要があります。これは私の見解ではコードです:

c = queryset.order_by('-order') 
request.session['query_search'] = c

私のサイトで例を見ることができます: http://www.lukmi.com/escorts/barcelona/ これは結果 (クエリセット) のリストであり、各プロファイルで使用する必要があるため、セッションに保存します。次のプロファイルに移動します。

大きいので収納に苦労します。誰か良い解決策を知っていますか?

4

4 に答える 4

3

PK のリストのみを保存し、必要に応じてクエリを実行できます。

于 2009-12-29T17:22:48.460 に答える
3

私は現在、あなたのサイトと非常によく似たサイトを Django でも開発しています。クエリセットをキャッシュに保存しました。キャッシュ キーは検索パラメーターの urlencoded 文字列です。この方法では、誰かが同一の検索を実行しても、同じ結果を得るために高価なクエリを繰り返す必要はありません。

あなたの場合、URLからパラメータリストを生成できます。

 form = form_class(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        persons = .... #expensive queries that fetch the results of search

        cache_id = urlencode(cd.items())
        #create md5 hash to use in link to results
        cache_id = hashlib.md5(cache_id).hexdigest()
        cache.set(cache_id, persons, CACHE_TIMEOUT)

        #also store form data in cache, so the form can be easily reconstructed from cache id
        cache.set(cache_id+'_form', request.POST, CACHE_TIMEOUT)
于 2009-12-30T13:33:37.833 に答える
0

大きなセッションはリソースを消費します (Django も例外ではないと思います)。
それを JSON リストにしてから、ユーザーのブラウザのローカル ストレージを使用します: http://jstorage.info、jQuery プラグイン、クロスブラウザ。
サーバーに戻ってテンプレートで新しい JSON 変数を要求するには、データが古い (チェックサム? まだ解決策が見つからない) かどうかを確認する方法が必要です。

于 2011-01-22T21:29:43.487 に答える
0

または、クエリによって生成された sql を保存してから実行することもできます。

request.session['query_search'] = c.query.as_sql()
于 2009-12-29T18:19:30.110 に答える