Commit a848923a by Alen Mujezinovic

Returning the dict from `parse_qs` in `FormParser` fails on forms.

Use `QueryDict` instead to return a value that is compatible with forms.
parent cf637e88
...@@ -11,6 +11,7 @@ We need a method to be able to: ...@@ -11,6 +11,7 @@ We need a method to be able to:
and multipart/form-data. (eg also handle multipart/json) and multipart/form-data. (eg also handle multipart/json)
""" """
from django.http import QueryDict
from django.http.multipartparser import MultiPartParser as DjangoMultiPartParser from django.http.multipartparser import MultiPartParser as DjangoMultiPartParser
from django.utils import simplejson as json from django.utils import simplejson as json
from djangorestframework import status from djangorestframework import status
...@@ -117,7 +118,7 @@ class FormParser(BaseParser): ...@@ -117,7 +118,7 @@ class FormParser(BaseParser):
`data` will be a :class:`QueryDict` containing all the form parameters. `data` will be a :class:`QueryDict` containing all the form parameters.
`files` will always be :const:`None`. `files` will always be :const:`None`.
""" """
data = parse_qs(stream.read(), keep_blank_values=True) data = QueryDict(stream.read())
return (data, None) return (data, None)
......
...@@ -131,3 +131,30 @@ ...@@ -131,3 +131,30 @@
# self.assertEqual(data['key1'], 'val1') # self.assertEqual(data['key1'], 'val1')
# self.assertEqual(files['file1'].read(), 'blablabla') # 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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment