【问题标题】:Django-rest , return customized JsonDjango-rest ,返回自定义的 Json
【发布时间】:2019-10-04 13:13:04
【问题描述】:

您好,我有此代码用于后端查询

class HexList(generics.ListCreateAPIView):
    serializer_class = HexSerializer

    def get_queryset(self):
        hex_list = Hex.objects.filter(game_id=self.kwargs['pk'])
        return hex_list

返回这个 Json:

[
    {
        "id": 2,
        "game_id": 0,
        "position": 3,
        "resource": "NO",
        "token": 0
    },
    {
        "id": 3,
        "game_id": 0,
        "position": 5,
        "resource": "WO",
        "token": 0
    },
    {
        "id": 4,
        "game_id": 0,
        "position": 6,
        "resource": "BR",
        "token": 4
    }
]

我希望它返回的是相同的数据,但具有像这样的 Json 形状:

    "hexes":[
                {
                    "id": 2,
                    "game_id": 0,
                    "position": 3,
                    "resource": "NO",
                    "token": 0
                },
                {
                    "id": 3,
                    "game_id": 0,
                    "position": 5,
                    "resource": "WO",
                    "token": 0
                },
                {
                    "id": 4,
                    "game_id": 0,
                    "position": 6,
                    "resource": "BR",
                    "token": 4
                }
            ]
}

我试过了:

class HexList(generics.ListCreateAPIView):
    serializer_class = HexSerializer

    def get_queryset(self):
        hex_list = Hex.objects.filter(game_id=self.kwargs['pk'])
        return Response({'hexes': hex_list})

我得到一个 ContentNotRenderedError 异常

我该怎么办?提前致谢

【问题讨论】:

标签: python django django-rest-framework


【解决方案1】:

至于您的get_queryset 方法,它应该返回您要使用的查询集,而不是Response。对于 Response 坐立不安,您应该覆盖 list 方法。这样的东西应该可以工作,但是我没有测试它。

class HexList(generics.ListCreateAPIView):
    serializer_class = HexSerializer

    def get_queryset(self):
        hex_list = Hex.objects.filter(game_id=self.kwargs['pk'])
        return hex_list

    def list(self, request, *args, **kwargs):
        hexes = self.get_queryset()
        serializer = self.get_serializer(hexes, many=True)
        return Response({'hexes': serializer.data})

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 2016-05-03
    • 1970-01-01
    • 2020-04-09
    • 2020-03-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多