如何在Django会话中存储查询集以便分页

3 投票
2 回答
2618 浏览
提问于 2025-04-18 06:13

在Django 1.6中,我有一个存储在数据库里的模型,我正在查询这个模型以获取一些结果。不过,由于结果有时候可能会多到填满一整页,所以我想实现一个分页系统,基本上是按照这篇文章的框架来做的:https://stackoverflow.com/a/18106904/178728

现在的问题是,我需要在request.session中存储我的查询集,而不仅仅是一些普通的值。但是这就引发了各种问题,因为Django抱怨我的查询集不能被转换成json格式。

到目前为止,我尝试过:

1) request.session['data'] = myQueryset # Fails
2) request.session['data'] = serializers.serialize('json', myQueryset) 
   # succeeds at first but fails in deserialization as
   # I can't reassemble the original queryset 

无论如何,我的问题是:存储和检索我的查询集的最简单方法是什么?

请注意,我需要在用户使用POST请求搜索数据库时存储查询集,然后通过GET请求检索结果,以便在分页器中使用。

提前谢谢你。

2 个回答

0

试试看

myQueryset.values()

它应该返回可以转换成JSON格式的查询结果。

1

我刚找到了解决我问题的方法:这正是我想要的东西:https://gist.github.com/bsnux/4672788

import pickle

# Session key
key = 'my_qs'

# Pizza => model example
qs = Pizza.objects.filter(ingredient='tomato')
# Dumping data
request.session[key] = pickle.dumps(qs.query)

# Loading data
pizzas = Pizza.objects.all()[:1]
pizzas.query = pickle.loads(request.session[key])

# Using qs
for pizza in pizzas:
print(pizza.ingredient)

希望这能在未来帮助到某个人。谢谢。

撰写回答