Djangorest,返回定制的Json

2024-04-26 18:52:36 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有一个后端查询的代码

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})

我得到一个ContentNotRenderError异常

我该怎么办?提前谢谢


Tags: selftokenidgamedefpositionresourcelist
1条回答
网友
1楼 · 发布于 2024-04-26 18:52:36

至于get_queryset方法,它应该返回要使用的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})

相关问题 更多 >