Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在与django的会话中存储查询集_Python_Django_Session_Django Queryset_Paginate - Fatal编程技术网

Python 在与django的会话中存储查询集

Python 在与django的会话中存储查询集,python,django,session,django-queryset,paginate,Python,Django,Session,Django Queryset,Paginate,在会话中存储大型查询集时出现问题。这个查询集来自一个搜索,我需要在每个结果中存储它以便分页。在我看来,这就是代码: c = queryset.order_by('-order') request.session['query_search'] = c 您可以在我的网站中看到一个示例: 这是一个结果列表(查询集),我将其存储在会话中,因为我需要在每个概要文件中使用它来转到下一个概要文件 我有一些问题,以存储它,因为它是非常大的。有人知道一个好的解决方案吗?您可以只存储PK列表,然后在需要时通过

在会话中存储大型查询集时出现问题。这个查询集来自一个搜索,我需要在每个结果中存储它以便分页。在我看来,这就是代码:

c = queryset.order_by('-order') 
request.session['query_search'] = c
您可以在我的网站中看到一个示例: 这是一个结果列表(查询集),我将其存储在会话中,因为我需要在每个概要文件中使用它来转到下一个概要文件


我有一些问题,以存储它,因为它是非常大的。有人知道一个好的解决方案吗?

您可以只存储PK列表,然后在需要时通过它们进行查询。

或者您可以存储查询生成的sql,然后执行

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

我目前正在Django开发一个与您非常相似的网站。 我将queryset存储在缓存中,其中缓存键是一个URL编码的搜索参数字符串——这样,如果有人执行相同的搜索,就不必重复昂贵的查询来获得相同的结果

在您的情况下,您可以从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)

大型会议消耗资源(我想Django对此也不例外)。
将其设置为JSON列表,然后使用用户的浏览器本地存储:,jQuery插件,跨浏览器。

您需要一种方法来判断数据是否过时(校验和?尚未找到解决方案),以便返回服务器并在模板中请求一个新的JSON var。

这样做的问题是,查询结果可能会随着页面的变化而变化。