diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index f3695e665..ddf9f0b1e 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -95,3 +95,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 70fe72f84..e79906eb7 100644 --- a/rest_framework/viewsets.py +++ b/rest_framework/viewsets.py @@ -148,6 +148,7 @@ class ModelViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, + mixins.MetadataModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`,