diff options
Diffstat (limited to 'rest_framework/request.py')
| -rw-r--r-- | rest_framework/request.py | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/rest_framework/request.py b/rest_framework/request.py index 40467c03..d508f9b4 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -42,13 +42,20 @@ class override_method(object):          self.view = view          self.request = request          self.method = method +        self.action = getattr(view, 'action', None)      def __enter__(self):          self.view.request = clone_request(self.request, self.method) +        if self.action is not None: +            # For viewsets we also set the `.action` attribute. +            action_map = getattr(self.view, 'action_map', {}) +            self.view.action = action_map.get(self.method.lower())          return self.view.request      def __exit__(self, *args, **kwarg):          self.view.request = self.request +        if self.action is not None: +            self.view.action = self.action  class Empty(object): @@ -280,8 +287,8 @@ class Request(object):              self._method = self._request.method              # Allow X-HTTP-METHOD-OVERRIDE header -            self._method = self.META.get('HTTP_X_HTTP_METHOD_OVERRIDE', -                                         self._method) +            if 'HTTP_X_HTTP_METHOD_OVERRIDE' in self.META: +                self._method = self.META['HTTP_X_HTTP_METHOD_OVERRIDE'].upper()      def _load_stream(self):          """ | 
