Django序列化程序 - 添加/更新字段属性值

时间:2016-03-20 18:30:11

标签: json django serialization

我使用Django序列化程序将模型数据序列化为JSON 例如: - 我有一个模型(CHECKTYPE),其中包含一个字段'类型'。
现在'类型'包含逗号(,)分隔的项目,如&test; test1,test1'。

我正在使用如下的Django序列化程序(在view.py中的某处):

gettypes = CHECKTYPE.objects.all()
mytypes = serializers.serialize("json", gettypes)
return HttpResponse(mytypes, content_type="application/json")

这会在网页上返回一个JSON,如下所示:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2"}}]

现在我想在序列化数据之前操纵字段属性 例如:我想在字段中添加一个属性' lasttype'如果我拆分'类型'那将是列表的最后一个索引。用逗号。

lasttype = types.split(',')[-1]

所以最终的json响应应如下所示:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2", "lasttype":"test2"}}]

我尝试按照以下方式执行此操作,但它无效:

gettypes = CHECKTYPE.objects.all()
updated_types = []
for mtype in gettypes:
    mtype.lasttype = mtype.types.split(',')[-1]
    updated_types.append(mtype)
mytypes = serializers.serialize("json", updated_types)
return HttpResponse(mytypes, content_type="application/json")

但这不起作用。它给了我相同的JSON响应,而没有显示' lasttype'属性。 如果有可能实现这一点,请告诉我。

谢谢,
沙善

2 个答案:

答案 0 :(得分:0)

修改您发送的响应的最佳方法是将json加载到dict然后修改dict,然后再次json转储响应的数据。

答案 1 :(得分:0)

不是在序列化之前修改字段,而是应该在序列化后修改字段。

tr -d '[]_'

使用import json mytypes = json.loads(serializers.serialize("json", gettypes)) updated_types = [] for mytype in mytypes: last_type = mytype['fields']['types'].split(',')[-1] mytype['fields']['lasttype'] = last_type updated_types.append(mytype) return JsonResponse(updated_types) ,您可以直接json数据,而无需重新序列化JsonResponsedict

预期数据应如下所示:

list