django:如何为JSON转储创建自定义编码器?

时间:2015-04-28 01:48:09

标签: python json django

我遇到了类型错误,它在运行以下代码后声称<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

1 个答案:

答案 0 :(得分:0)

Django有自己的关于序列化对象的文档,请参阅https://docs.djangoproject.com/en/1.7/topics/serialization/#serialization-formats-json(请注意在右下角选择正确的Django版本)