Установка условного класса сериализатора удаляет пользовательский класс сериализатора для дополнительного действия в Django rest framework

У меня есть один modelviewset и несколько дополнительных действий для него.

class TestViewset(
    mixins.RetrieveModelMixin,
    mixins.ListModelMixin,
    mixins.UpdateModelMixin,
    GenericViewSet,
):
    permission_classes = [CustomPermissionClass]

    def get_serializer_class(self) -> Type[ModelSerializer]:
    
        if self.action == "list" or self.action == "get":
            return FirstSerializer
        return SecondSerializer


    @action(
        detail=True,
        methods=["POST"],
        url_path="test-path",
        url_name="test-path",
        serializer_class=MyCustomSerializer,
    )
    def test_path(self, request: Request, **kwargs) -> Response:
        
        print(self.get_serializer()) # Despite setting the 'MyCustomSerializer' it still gives me 'SecondSerializer'
       
        return Response(status=status.HTTP_200_OK)

Если я удалю метод get_serializer_class и дам только один сериализатор, он работает.

Что может быть лучшим решением для этого или это какая-то ошибка в drf?

В идеале дополнительное действие должно использовать класс сериализатора, который был предоставлен, но это не так.

Возможно, для этого есть лучший подход, но, насколько я понимаю, это можно исправить, изменив get_serializer_class на

    def get_serializer_class(self) -> Type[ModelSerializer]:
        if self.action == "list" or self.action == "get":
            return FirstSerializer
        return self.serializer_class or SecondSerializer

Это обеспечит использование serializer_class, определенного в вашем действии, если действие не является ни list, ни get.

Вернуться на верх