Django ViewSet serializer_class игнорируется

У меня есть две модели: ModelA и ModelB, с соответствующими им сериализаторами ModelASerializer и ModelBSerializer

В определенном наборе представлений, называемом MyViewSet, у меня есть следующая структура:

class MyViewSetRoot(viewsets.ModelViewSet):
    http_method_names = ["get"]
    # The returned values are of type "ModelA", so I need it to use that serializer
    serializer_class = ModelASerializer
    queryset = ""

Наконец, в моем реальном представлении я делаю примерно следующее:

class MyViewSet(MyViewSetRoot):
    get(self, request: HttpRequest, *args, **kwargs) -> Response:
        ModelA_queryset = ModelA.objects.all()
        return Response(
            data=ModelA_queryset,
            status=status.HTTP_200_OK,
        )

В этом случае я ожидал бы, что набор запросов будет сериализован с использованием ModelASerializer, который я указал в поле serializer_class. Однако я получаю ошибку

Object of type ModelA is not JSON serializable

Если я сделаю это вместо:

class MyViewSet(MyViewSetRoot):
    get(self, request: HttpRequest, *args, **kwargs) -> Response:
        ModelA_queryset = ModelA.objects.all()
        serialized_queryset = ModelASerializer(ModelA_queryset, many=True)
        return Response(
            data=serialized_queryset.data,
            status=status.HTTP_200_OK,
        )

Это работает просто отлично, но я хочу избежать явной сериализации в представлении.

Есть идеи, что на самом деле может происходить? Вынужден ли я в этом случае явно сериализовать?

Я думаю, что вам не нужно настраивать функцию get. В ModelViewSet, функция для API GET, это list или retrieve. Но вам не нужно переопределять ее.

class MyViewSetRoot(viewsets.ModelViewSet):
    http_method_names = ["get"]
    serializer_class = ModelASerializer
    queryset = ModelA.objects.all()

class MyViewSet(MyViewSetRoot):
    pass
Вернуться на верх