diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index 9774a94c76..ea6995692e 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -192,7 +192,7 @@ def get_components(self, path, method): if method.lower() == 'delete': return {} - serializer = self.get_serializer(path, method) + serializer = self.get_components_serializer(path, method) if not isinstance(serializer, serializers.Serializer): return {} @@ -615,6 +615,18 @@ def get_serializer(self, path, method): .format(view.__class__.__name__, method, path)) return None + def get_components_serializer(self, path, method): + # Override this function in a subclass if necessary. + return self.get_serializer(path, method) + + def get_body_serializer(self, path, method): + # Override this function in a subclass if necessary. + return self.get_serializer(path, method) + + def get_response_serializer(self, path, method): + # Override this function in a subclass if necessary. + return self.get_serializer(path, method) + def _get_reference(self, serializer): return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer))} @@ -624,7 +636,7 @@ def get_request_body(self, path, method): self.request_media_types = self.map_parsers(path, method) - serializer = self.get_serializer(path, method) + serializer = self.get_body_serializer(path, method) if not isinstance(serializer, serializers.Serializer): item_schema = {} @@ -648,7 +660,7 @@ def get_responses(self, path, method): self.response_media_types = self.map_renderers(path, method) - serializer = self.get_serializer(path, method) + serializer = self.get_response_serializer(path, method) if not isinstance(serializer, serializers.Serializer): item_schema = {}