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.
Where
get_serializer_class()
is used to determine which serializer would be used for aModelViewSet
, 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:
drfdocs doesn't currently set the
self.action
member before callingget_serializer_class()
, so it gets the default serializer with no fields, whereas an actual API request would get either theFooSerializer
or theFooListSerializer
.