包括响应中的型号名称

时间:2013-12-30 14:06:13

标签: python django json django-rest-framework

待解决方案,但我所看到的是,我需要按照此处的文档实际创建自定义渲染器 -

http://django-rest-framework.org/api-guide/renderers

我知道这是因为文件“renderers.py”中的XML输出中的相同数据存在XMLRenderer

如果我改变,使用下面的例子,“list-item”作为表/模型名称,我得到了我想要的输出,所以我将调查创建一个自定义渲染器。

我有一个看起来像这样的json输出 -

{

    "trgmst_id": 224,
    "trgjob_id": 22652,
    "jobmst_id": 10079,
    "trgjob_order": 2,
    "trgjob_type": 0,
    "trgjob_level": 0

}

但我希望它看起来像这样 -

{
  "trgjob": {
    "trgmst_id": 224,
    "trgjob_id": 22652,
    "jobmst_id": 10079,
    "trgjob_order": 2,
    "trgjob_type": 0,
    "trgjob_level": 0
  }
}

如何让我的序列化程序或视图包含模型名称?

这是我的序列化程序 -

class TrgjobSerializer(serializers.ModelSerializer):

    class Meta:
        model = Trgjob

以下是我的观点 -

@csrf_exempt
def trgjob_detail(request, pk):
    """
    Retrieve, update or delete a code snippet.
    """
    try:
        DEV = Trgjob.objects.using('database1').filter(jobmst_id=pk)
    except Trgjob.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = TrgjobSerializer(DEV, many=True)
        return JSONResponse(serializer.data)

这是JSONResponse -

class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders its content into JSON.
    """
    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)

1 个答案:

答案 0 :(得分:1)

一种选择是在视图中构造所需的输出。例如

from rest_framework.response import Response


def view(request):
    ...
    serializer = TrgJobSerializer(DEV, many=True)
    response = {'trgjob': serializer.data}
    return Response(response)

JSONRenderer仍将处理渲染到JSON,例如将False转换为false