diff --git a/rest_framework/utils/html.py b/rest_framework/utils/html.py index 3b871027c7..121c825c73 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 aeb092ee05..1336003995 100644 --- a/tests/test_serializer_nested.py +++ b/tests/test_serializer_nested.py @@ -167,3 +167,32 @@ def test_empty_not_allowed_if_allow_empty_is_set_to_false(self): 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]) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy