@@ -289,3 +289,32 @@ class Meta:
289289 serializer = TestSerializer (data = [], many = True )
290290 assert not serializer .is_valid ()
291291 assert serializer .errors == {'non_field_errors' : ['Non field error' ]}
292+
293+
294+ class TestSerializerPartialUsage :
295+ """
296+ When not submitting key for list fields or multiple choice, partial
297+ serialization should result in an empty state (key not there), not
298+ an empty list.
299+
300+ Regression test for Github issue #2761.
301+ """
302+ def test_partial_listfield (self ):
303+ class ListSerializer (serializers .Serializer ):
304+ listdata = serializers .ListField ()
305+ serializer = ListSerializer (data = MultiValueDict (), partial = True )
306+ result = serializer .to_internal_value (data = {})
307+ assert "listdata" not in result
308+ assert serializer .is_valid ()
309+ assert serializer .validated_data == {}
310+ assert serializer .errors == {}
311+
312+ def test_partial_multiplechoice (self ):
313+ class MultipleChoiceSerializer (serializers .Serializer ):
314+ multiplechoice = serializers .MultipleChoiceField (choices = [1 , 2 , 3 ])
315+ serializer = MultipleChoiceSerializer (data = MultiValueDict (), partial = True )
316+ result = serializer .to_internal_value (data = {})
317+ assert "multiplechoice" not in result
318+ assert serializer .is_valid ()
319+ assert serializer .validated_data == {}
320+ assert serializer .errors == {}
0 commit comments