如何在django会话中存储查询集以进行分页

时间:2014-05-11 18:36:12

标签: python json django pagination django-queryset

在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 :(得分:2)

我刚刚找到了解决问题的方法:这正是我所寻找的: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)

希望这可以帮助将来的某个人。欢呼声。

答案 1 :(得分:0)

尝试

myQueryset.values()

它应该返回JSON可序列化的查询集。