今天用Django1.8.2寫一個購物車系統時用到session,需要序列化一個對象實例,直接用request.session[request.user.id] = cart 這樣的方式會報無法序列化的錯誤。
經過查找資料和嘗試,發現原因如下。
從Django 1.6開始session里面的數據都是用JSON來serialize。JSON的session只能接受簡單的數據結構比如str, list, dict。 有兩個選擇,可以先把cart的數據放在一個dict里面再存到 session或者可以換一個SessionSerializer。Django還提供一個用pickle來serialize的選擇可以存任何一個數據結構。
在settings.py中加入 SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
問題解決~
StackOverflow上也有類似的解決方案
http://stackoverflow.com/questions/24229397/django-object-is-not-json-serializable-error-after-upgrading-django-to-1-6-5