Django中TypeError:AllCompany对象无法JSON序列化(无自定义代码栈追踪)
解决Django中
Object of type AllCompany is not JSON serializable序列化报错 问题场景
Django开发时碰上个头疼的TypeError,提示Object of type AllCompany is not JSON serializable,但报错栈全是Django库的代码,完全看不到自己写的业务代码在哪出问题。
排查经过
- 先通过请求URL定位到对应的视图函数
- 用打印语句做二分排查,来回试了好几次都没定位到问题点
- 最后才发现,是执行
request.session['variance_dict'] = variance_dict的时候,variance_dict里藏着一个AllCompany的模型对象——Django在session序列化时不认这个对象,直接报错了
踩坑提醒
刚学MVC控制层的话很容易忽略:Django的session数据不是在赋值时就序列化,而是在视图函数return后的请求收尾阶段统一做序列化操作。所以哪怕你是在视图中间步骤给session存了数据,也要确保里面的内容都是可JSON序列化的类型。
解决办法
别直接把模型对象塞进session,要提取对象里可序列化的字段(比如ID、名称这些基础类型)存成字典再赋值:
# 错误示范:直接存模型对象 request.session['variance_dict'] = {'company': AllCompany.objects.get(id=1)} # 正确写法:提取可序列化字段 company = AllCompany.objects.get(id=1) request.session['variance_dict'] = { 'company_id': company.id, 'company_name': company.name }
内容的提问来源于stack exchange,提问作者Anthony Petrillo
相关产品推荐
相关产品推荐

