store a queryset in the session with django
我在会话中存储大型查询集时遇到问题。这个查询集来自一个搜索,我需要将它存储起来以便在每个结果中分页。这是我视图中的代码:
1 2 | c = queryset.order_by('-order') request.session['query_search'] = c |
你可以在我的网站上看到一个例子:http://www.lukmi.com/sawards/barcelona/这是一个结果列表(查询集),我将它存储在会话中,因为我需要在每个概要文件中使用它来转到下一个概要文件。
我有一些问题要保存它,因为它很大。有人知道一个好的解决方案吗?
我目前正在开发一个非常类似的网站,你也在Django。我将查询集存储在cache中,cache键是一个用urlencoded表示的搜索参数字符串-这样,如果有人执行相同的搜索,就不必重复昂贵的查询来获得相同的结果。
在您的例子中,您可以从URL生成参数列表。
1 2 3 4 5 6 7 8 9 10 11 12 | 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) |
号
您只能存储pk列表,然后在需要时通过它们进行查询。
大会议吃资源(我想姜戈也不例外)。把它作为JSON列表,然后使用用户的浏览器本地存储:http://jstorage.info,一个jquery插件,cross-browser。您需要一种方法来判断数据是否过时(校验和?还没有找到解决方案)返回服务器并在模板中请求一个新的JSON变量。
或者您可以存储查询生成的SQL,然后执行。
1 | request.session['query_search'] = c.query.as_sql() |