diff --git a/rest_framework/utils/html.py b/rest_framework/utils/html.py
index 3b871027c..121c825c7 100644
--- a/rest_framework/utils/html.py
+++ b/rest_framework/utils/html.py
@@ -80,10 +80,12 @@ def parse_html_dict(dictionary, prefix=''):
"""
ret = MultiValueDict()
regex = re.compile(r'^%s\.(.+)$' % re.escape(prefix))
- for field, value in dictionary.items():
+ for field in dictionary:
match = regex.match(field)
if not match:
continue
key = match.groups()[0]
- ret[key] = value
+ value = dictionary.getlist(field)
+ ret.setlist(key, value)
+
return ret
diff --git a/tests/test_serializer_nested.py b/tests/test_serializer_nested.py
index aeb092ee0..133600399 100644
--- a/tests/test_serializer_nested.py
+++ b/tests/test_serializer_nested.py
@@ -167,3 +167,32 @@ class TestNestedSerializerWithMany:
expected_errors = {'not_allow_empty': {'non_field_errors': [serializers.ListSerializer.default_error_messages['empty']]}}
assert serializer.errors == expected_errors
+
+
+class TestNestedSerializerWithList:
+ def setup(self):
+ class NestedSerializer(serializers.Serializer):
+ example = serializers.MultipleChoiceField(choices=[1, 2, 3])
+
+ class TestSerializer(serializers.Serializer):
+ nested = NestedSerializer()
+
+ self.Serializer = TestSerializer
+
+ def test_nested_serializer_with_list_json(self):
+ input_data = {
+ 'nested': {
+ 'example': [1, 2],
+ }
+ }
+ serializer = self.Serializer(data=input_data)
+
+ assert serializer.is_valid()
+ assert serializer.validated_data['nested']['example'] == set([1, 2])
+
+ def test_nested_serializer_with_list_multipart(self):
+ input_data = QueryDict('nested.example=1&nested.example=2')
+ serializer = self.Serializer(data=input_data)
+
+ assert serializer.is_valid()
+ assert serializer.validated_data['nested']['example'] == set([1, 2])