【问题标题】:Including model name in response在响应中包含模型名称
【发布时间】:2013-12-30 14:06:12
【问题描述】:

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

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)

【问题讨论】:

    标签: python django json django-rest-framework


    【解决方案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 等。

    【讨论】:

    • 谢谢!这是迄今为止更加优雅和无缝!完全按照您那里所做的那样,默认渲染器完美地拾取了一切!
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2023-01-26
    • 1970-01-01
    • 2023-02-02
    • 2013-06-19
    • 2021-06-06
    相关资源
    最近更新 更多