Tastypie:仅针对CREATE和UPDATE更改响应

时间:2013-07-10 20:29:42

标签: rest tastypie

有没有办法只为CREATE和UPDATE请求更改来自服务器的响应,所以它看起来像

{ "root": 
    [ { "field1": "value1", "field2": "value2", "field3": "value3", "id": 12 ],
"success": true }

而不是:

{ "field1": "value1", "field2": "value2", "field3": "value3", "id": 12 } 

3 个答案:

答案 0 :(得分:1)

当然可以。看看钩子:

alter_list_data_to_serialize(self, request, data)

http://django-tastypie.readthedocs.org/en/latest/resources.html#alter-list-data-to-serialize

alter_detail_data_to_serialize(self, request, data)

http://django-tastypie.readthedocs.org/en/latest/resources.html#alter-detail-data-to-serialize

答案 1 :(得分:0)

我写了一个自定义序列化程序,使其工作:

class CustomJSONSerializer(Serializer):
    def to_json(self, data, options=None):
        options = options or {}
        data = self.to_simple(data, options)
        root = {}
        root['success'] = True
        if data.has_key('meta'):
            meta = data['meta']
            del data['meta']
            root.update(meta)
        objects = []
        if data.has_key('objects'):
            objects = data['objects']
            del data['objects']
        if not objects:
            objects = [data]
        root['root'] = objects
        return simplejson.dumps(root, cls=json.DjangoJSONEncoder, sort_keys=True) 

答案 2 :(得分:0)

我用这样的代码做了同样的事情

class MyModel: class Meta: ... def alter_detail_data_to_serialize(self, request, to_be_serialized): return {"myRoot": to_be_serialized}