From 1441469d3815504036d8e9472c4c5dc37f2212f5 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Thu, 28 May 2015 06:53:47 -0400 Subject: [PATCH 1/2] this is crazy, but call _parse maybe? --- rest_framework/request.py | 3 +-- tests/test_request.py | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rest_framework/request.py b/rest_framework/request.py index e4b5bc263..7681176a1 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -381,8 +381,7 @@ class Request(object): return # At this point we're committed to parsing the request as form data. - self._data = self._request.POST - self._files = self._request.FILES + self._data, self._files = self._parse() self._full_data = self._data.copy() self._full_data.update(self._files) diff --git a/tests/test_request.py b/tests/test_request.py index c274ab69d..6ba0c27c5 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -58,6 +58,7 @@ class TestMethodOverloading(TestCase): reserved form field """ request = Request(factory.post('/', {api_settings.FORM_METHOD_OVERRIDE: 'DELETE'})) + request.parsers = (MultiPartParser(), ) self.assertEqual(request.method, 'DELETE') def test_x_http_method_override_header(self): @@ -66,6 +67,7 @@ class TestMethodOverloading(TestCase): the X-HTTP-Method-Override header. """ request = Request(factory.post('/', {'foo': 'bar'}, HTTP_X_HTTP_METHOD_OVERRIDE='DELETE')) + request.parsers = (MultiPartParser(), ) self.assertEqual(request.method, 'DELETE') request = Request(factory.get('/', {'foo': 'bar'}, HTTP_X_HTTP_METHOD_OVERRIDE='DELETE')) @@ -148,7 +150,7 @@ class TestContentParsing(TestCase): api_settings.FORM_CONTENTTYPE_OVERRIDE: content_type } request = Request(factory.post('/', form_data)) - request.parsers = (JSONParser(), ) + request.parsers = (JSONParser(), MultiPartParser(), ) self.assertEqual(request.DATA, json_data) def test_form_POST_unicode(self): From 45203d20e64cd15a47a71203868f8e1f59431a19 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Thu, 28 May 2015 07:30:47 -0400 Subject: [PATCH 2/2] Added POST compatibility, fixes test --- rest_framework/request.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rest_framework/request.py b/rest_framework/request.py index 7681176a1..7f1a2e84b 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -385,6 +385,10 @@ class Request(object): self._full_data = self._data.copy() self._full_data.update(self._files) + # Point the underlying request data to our parsed data for backwards compatibility. + self._request._post = self._data + self._request._files = self._files + # Method overloading - change the method and remove the param from the content. if ( self._METHOD_PARAM and