diff options
| author | Alen Mujezinovic | 2011-06-09 16:24:27 +0100 |
|---|---|---|
| committer | Alen Mujezinovic | 2011-06-09 16:24:27 +0100 |
| commit | a848923a394853e7ed30f14189703c4afaf0c772 (patch) | |
| tree | 0491538f8511fd03d6a7e07fd67c6f7a8af77f68 /djangorestframework | |
| parent | cf637e886b9b293e44de55b9f829b738fb286365 (diff) | |
| download | django-rest-framework-a848923a394853e7ed30f14189703c4afaf0c772.tar.bz2 | |
Returning the dict from `parse_qs` in `FormParser` fails on forms.
Use `QueryDict` instead to return a value that is compatible with forms.
Diffstat (limited to 'djangorestframework')
| -rw-r--r-- | djangorestframework/parsers.py | 3 | ||||
| -rw-r--r-- | djangorestframework/tests/parsers.py | 27 |
2 files changed, 29 insertions, 1 deletions
diff --git a/djangorestframework/parsers.py b/djangorestframework/parsers.py index 726e09e9..4f49c20a 100644 --- a/djangorestframework/parsers.py +++ b/djangorestframework/parsers.py @@ -11,6 +11,7 @@ We need a method to be able to: and multipart/form-data. (eg also handle multipart/json) """ +from django.http import QueryDict from django.http.multipartparser import MultiPartParser as DjangoMultiPartParser from django.utils import simplejson as json from djangorestframework import status @@ -117,7 +118,7 @@ class FormParser(BaseParser): `data` will be a :class:`QueryDict` containing all the form parameters. `files` will always be :const:`None`. """ - data = parse_qs(stream.read(), keep_blank_values=True) + data = QueryDict(stream.read()) return (data, None) diff --git a/djangorestframework/tests/parsers.py b/djangorestframework/tests/parsers.py index 3ab1a61c..656d63c8 100644 --- a/djangorestframework/tests/parsers.py +++ b/djangorestframework/tests/parsers.py @@ -131,3 +131,30 @@ # self.assertEqual(data['key1'], 'val1') # self.assertEqual(files['file1'].read(), 'blablabla') +from StringIO import StringIO +from cgi import parse_qs +from django import forms +from django.test import TestCase +from djangorestframework.parsers import FormParser + +class Form(forms.Form): + field1 = forms.CharField(max_length=3) + field2 = forms.CharField() + +class TestFormParser(TestCase): + def setUp(self): + self.string = "field1=abc&field2=defghijk" + + def test_fail(self): + """ Demonstrate that `parse_qs` fails on forms """ + data = parse_qs(self.string, keep_blank_values=True) + self.assertEqual(Form(data).is_valid(), False) + + def test_parse(self): + """ Make sure the `QueryDict` works OK """ + parser = FormParser(None) + + stream = StringIO(self.string) + (data, files) = parser.parse(stream) + + self.assertEqual(Form(data).is_valid(), True) |
