2009-12-29 64 views
2

我有在會話中存儲大查詢集的問題。此查詢集來自搜索,我需要將其存儲爲每個結果中的分頁。這是我認爲的代碼:在與django的會話中存儲查詢集

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

你可以在我的網站上看到一個例子:http://www.lukmi.com/escorts/barcelona/ 這是結果(查詢集)的列表,我把它存儲在會話,因爲我需要使用它每個配置文件轉到下一個配置文件。

我存在一些問題,因爲它非常大。誰都知道一個好的解決方案?

回答

3

您只能存儲PK列表,然後在需要時通過它們進行查詢。

0

或者你可以存儲由查詢生成的sql,然後執行。

request.session['query_search'] = c.query.as_sql() 
+0

這樣做的問題是查詢結果可能會因頁面而異。 – 2009-12-29 18:21:16

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) 
0

大會議討論的問題(我想Django也不例外)。
將其設置爲JSON列表,然後使用用戶的瀏覽器本地存儲:http://jstorage.info,一個jQuery插件,跨瀏覽器。
您需要一種方法來判斷數據是否過期(校驗和?尚未找到解決方案)以返回服務器並在模板中請求新的JSON變量。