Arjun Kesava
Arjun Kesava

Reputation: 800

Type Error: is not JSON serializable

I`m trying to pass database objects from one view to another view. But when I try to achieve this using SESSION, I am getting this "is not JSON serializiable" error.

My Views.py:

def index(request):
    listset = TheaterBase.objects.all()
    request.session['s_listset'] = listset

def otherview(request):
    result = request.session.get('s_listset')

How to pass the Database objects in between the views?

Thanks in advance

Upvotes: 1

Views: 3655

Answers (3)

lucasnadalutti
lucasnadalutti

Reputation: 5958

Server sessions can store JSON objects only. You are trying to store a complex Django QuerySet object, which naturally is not JSON serializable.

And trust me, even if it was, you wouldn't want to do this. It's not healthy to abuse your server's session with a high amount of data.

Upvotes: 1

Ivan
Ivan

Reputation: 2675

You can try using django serializers

from django.core import serializers
listset = serializers.serialize("json", TheaterBase.objects.all())

Upvotes: 0

gipsy
gipsy

Reputation: 3859

Let's just assume that your TheaterBase class is something like below(pseudo code)

class TheaterBase:
  field1 ...
  fielld2 ...
 -------
 # a method to produce json serializable representation 
 def as_dict(self):
   return {'field1': self.field1, 'fileld2': self.fielld2}

Then on you view do

listset = [x.as_dict() for x in TheaterBase.objects.all()]

The issue here is the object coming out of your db query are not json serializable. The as_dict method above is constructing a json serializable representation of that object.

Upvotes: 0

Related Questions