类型错误:不是JSON可序列化的

时间:2016-12-07 14:02:53

标签: python json django session

我试图将数据库对象从一个视图传递到另一个视图。但是当我尝试使用SESSION实现这一点时,我得到的是“不是JSON可序列化”错误。

我的 Views.py

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

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

如何在视图之间传递数据库对象?

提前致谢

3 个答案:

答案 0 :(得分:1)

服务器会话只能存储JSON对象。您正在尝试存储一个复杂的Django QuerySet对象,该对象自然不是JSON可序列化的。

相信我,即使它是,你也不想这样做。使用大量数据滥用服务器会话是不健康的。

答案 1 :(得分:0)

让我们假设您的TheaterBase类类似于下面(伪代码)

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

然后在你看来做

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

这里的问题是来自db查询的对象不是json serializable。上面的as_dict方法是构造该对象的json可序列化表示。

答案 2 :(得分:0)

您可以尝试使用django序列化程序

function saveDuplicate($data)
{
     $data = [$data, $data];
     $this->saveAll($data);
}