2009-12-29 60 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变量。