Skip to content

Commit 07efbdb

Browse files
dioxlovelydinosaur
authored andcommitted
Fix APIClient.get() when path contains unicode arguments (#4458)
1 parent 80bd3b9 commit 07efbdb

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

rest_framework/test.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ def get(self, path, data=None, **extra):
7979
r = {
8080
'QUERY_STRING': urlencode(data or {}, doseq=True),
8181
}
82-
# Fix to support old behavior where you have the arguments in the url
83-
# See #1461
8482
if not data and '?' in path:
85-
r['QUERY_STRING'] = path.split('?')[1]
83+
# Fix to support old behavior where you have the arguments in the
84+
# url. See #1461.
85+
query_string = force_bytes(path.split('?')[1])
86+
if six.PY3:
87+
query_string = query_string.decode('iso-8859-1')
88+
r['QUERY_STRING'] = query_string
8689
r.update(extra)
8790
return self.generic('GET', path, **r)
8891

tests/test_testing.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,10 @@ def test_request_factory_url_arguments(self):
245245
self.assertEqual(dict(request.GET), {'demo': ['test']})
246246
request = factory.get('/view/', {'demo': 'test'})
247247
self.assertEqual(dict(request.GET), {'demo': ['test']})
248+
249+
def test_request_factory_url_arguments_with_unicode(self):
250+
factory = APIRequestFactory()
251+
request = factory.get('/view/?demo=testé')
252+
self.assertEqual(dict(request.GET), {'demo': ['testé']})
253+
request = factory.get('/view/', {'demo': 'testé'})
254+
self.assertEqual(dict(request.GET), {'demo': ['testé']})

0 commit comments

Comments
 (0)