@@ -289,3 +289,32 @@ class Meta:
289
289
serializer = TestSerializer (data = [], many = True )
290
290
assert not serializer .is_valid ()
291
291
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