Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
optiz0r opened this issue May 30, 2017 · 1 comment

Comments

@optiz0r
Copy link

optiz0r commented May 30, 2017

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.

@mohammedzee1000
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants