stratis
stratis

Reputation: 8042

How to store a queryset in django session for pagination

In Django 1.6 I've got a model stored in my database which I am querying in order to get a number of results back. However since the results may sometimes be more than enough to fill a page, I am trying to implement the pagination system narrowly following the skeleton of this post: https://stackoverflow.com/a/18106904/178728.

Now the problem that in request.session I need to store my queryset and not just plain values. However this creates all sorts of problems as Django complains that my queryset is not json serializable.

So far I've tried doing:

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 

Anyway my question is this: What's the easiest way to store and then retrieve my queryset?

Note that I need to store the queryset when a user searches the db using a POST request and then retrieve the results through GET for use within the paginator.

Thanks in advance.

Upvotes: 3

Views: 2665

Answers (2)

stratis
stratis

Reputation: 8042

I just found a solution to my problem: This is exactly what I was looking for: 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)

Hopefully this helps someone in the future. Cheers.

Upvotes: 1

Michał Tabor
Michał Tabor

Reputation: 2467

Try

myQueryset.values()

It should return JSON-seralizable queryset.

Upvotes: 0

Related Questions