django-rest-framework-docs icon indicating copy to clipboard operation
django-rest-framework-docs copied to clipboard

get_serializer_class doesn't recreate same conditions as would be used by DRF

Open optiz0r opened this issue 8 years ago • 1 comments

Where get_serializer_class() is used to determine which serializer would be used for a ModelViewSet, it doesn't re-create the same environment as DRF would use when servicing an actual API request, and so it may return different results (and thus incorrect documentation).

As an example, I have the following method, which uses a cut-down serializer for list actions, and a full-content serializer for retrieve actions:

class FooViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Foo.objects.all()

    def get_serializer_class(self):
        if hasattr(self, 'action'):
            if self.action == 'list':
                return FooListSerializer
            elif self.action == 'retrieve':
                return FooSerializer

        return serializers.Default

drfdocs doesn't currently set the self.action member before calling get_serializer_class(), so it gets the default serializer with no fields, whereas an actual API request would get either the FooSerializer or the FooListSerializer.

optiz0r avatar May 30 '17 22:05 optiz0r

+1 to this I am not able to use versioned docs properly api thanks to this

mohammedzee1000 avatar Nov 30 '17 09:11 mohammedzee1000