diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 1104aa29c..a5ec9c3d9 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -89,3 +89,14 @@ class DestroyModelMixin(object): def perform_destroy(self, instance): instance.delete() + + +class MetadataModelMixin(object): + def metadata(self, request, *args, **kwargs): + """ + Handler method for HTTP 'OPTIONS' request. + """ + if self.metadata_class is None: + return self.http_method_not_allowed(request, *args, **kwargs) + data = self.metadata_class().determine_metadata(request, self) + return Response(data, status=status.HTTP_200_OK) diff --git a/rest_framework/viewsets.py b/rest_framework/viewsets.py index 819deb430..7f3c07ddd 100644 --- a/rest_framework/viewsets.py +++ b/rest_framework/viewsets.py @@ -146,6 +146,7 @@ class ModelViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, + mixins.MetadataModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`,