如何在Django会话中存储查询集以便分页
在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)
希望这能在未来帮助到某个人。谢谢。