From 02b0c1118a46523473a545d95b776ba7320f18c6 Mon Sep 17 00:00:00 2001 From: Christian Kreuzberger Date: Fri, 20 Apr 2018 08:36:57 +0200 Subject: [PATCH] Fixed an issue with ListSerializer.to_internal_value and also added a test for it --- rest_framework/serializers.py | 2 +- tests/test_serializer_lists.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 34cb74a86..43c7972a4 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -635,7 +635,7 @@ class ListSerializer(BaseSerializer): List of dicts of native values <- List of dicts of primitive datatypes. """ if html.is_html_input(data): - data = html.parse_html_list(data, default=empty) + data = html.parse_html_list(data, default=[]) if not isinstance(data, list): message = self.error_messages['not_a_list'].format( diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 34c3d100b..12ed78b84 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -1,3 +1,4 @@ +from django.http import QueryDict from django.utils.datastructures import MultiValueDict from rest_framework import serializers @@ -532,3 +533,32 @@ class TestSerializerPartialUsage: assert value == updated_data_list[index][key] assert serializer.errors == {} + + +class TestEmptyListSerializer: + """ + Tests the behaviour of ListSerializers when there is no data passed to it + """ + + def setup(self): + class ExampleListSerializer(serializers.ListSerializer): + child = serializers.IntegerField() + + self.Serializer = ExampleListSerializer + + def test_nested_serializer_with_list_json(self): + # pass an empty array to the serializer + input_data = [] + + serializer = self.Serializer(data=input_data) + + assert serializer.is_valid() + assert serializer.validated_data == [] + + def test_nested_serializer_with_list_multipart(self): + # pass an "empty" QueryDict to the serializer (should be the same as an empty array) + input_data = QueryDict('') + serializer = self.Serializer(data=input_data) + + assert serializer.is_valid() + assert serializer.validated_data == []