我遇到了类型错误,它在运行以下代码后声称<Store: test store> is not JSON serializable
。
def storeliqour_view(request, store_id):
objects = StoreLiquor.objects.filter(storeID=store_id)
list_display = ['StoreLiquorID', 'storeID', 'StorePrice', 'SPI']
# extract information
data = [[getattr(obj, field) for field in list_display] for obj in objects]
#define response
response = {
'aaData': data,
'iTotalRecords': iTotalRecords,
'iTotalDisplayRecords': iTotalDisplayRecords,
'sEcho': request.GET['sEcho']
}
#serialize to json
s = BytesIO()
json.dump(response, s, cls=MainEncoder)
s.seek(0)
return HttpResponse(s.read())
错误中的<Store: test store>
来自我调用storeID
字段,该字段是Store
模型的外键。这应该返回商店的名称,在这种情况下,&#34;测试商店&#34;。这会产生TypeError
。
我试图编写一个自定义编码器,允许我根据storeID
返回商店名称。但我似乎无法弄明白。我确实正确编码小数,如下面的代码所示,但我该如何继续?如果我可以将表单完全更改为html,或者将其转换为链接,那将会特别酷。
class MainEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Decimal):
obj = float(obj)
else:
obj = super(MainEncoder, self).default(obj)
return obj
答案 0 :(得分:0)
Django有自己的关于序列化对象的文档,请参阅https://docs.djangoproject.com/en/1.7/topics/serialization/#serialization-formats-json(请注意在右下角选择正确的Django版本)