@@ -466,6 +466,55 @@ class TestSerializer(serializers.Serializer):
466
466
assert serializer .is_valid ()
467
467
assert serializer .validated_data == {'scores' : [1 ]}
468
468
469
+ def test_querydict_list_input_no_values_uses_default (self ):
470
+ """
471
+ When there are no values passed in, and default is set
472
+ The field should return the default value
473
+ """
474
+ class TestSerializer (serializers .Serializer ):
475
+ a = serializers .IntegerField (required = True )
476
+ scores = serializers .ListField (default = lambda : [1 , 3 ])
477
+
478
+ serializer = TestSerializer (data = QueryDict ('a=1&' ))
479
+ assert serializer .is_valid ()
480
+ assert serializer .validated_data == {'a' : 1 , 'scores' : [1 , 3 ]}
481
+
482
+ def test_querydict_list_input_supports_indexed_keys (self ):
483
+ """
484
+ When data is passed in the format `scores[0]=1&scores[1]=3`
485
+ The field should return the correct list, ignoring the default
486
+ """
487
+ class TestSerializer (serializers .Serializer ):
488
+ scores = serializers .ListField (default = lambda : [1 , 3 ])
489
+
490
+ serializer = TestSerializer (data = QueryDict ("scores[0]=5&scores[1]=6" ))
491
+ assert serializer .is_valid ()
492
+ assert serializer .validated_data == {'scores' : ['5' , '6' ]}
493
+
494
+ def test_querydict_list_input_no_values_no_default_and_not_required (self ):
495
+ """
496
+ When there are no keys passed, there is no default, and required=False
497
+ The field should be skipped
498
+ """
499
+ class TestSerializer (serializers .Serializer ):
500
+ scores = serializers .ListField (required = False )
501
+
502
+ serializer = TestSerializer (data = QueryDict ('' ))
503
+ assert serializer .is_valid ()
504
+ assert serializer .validated_data == {}
505
+
506
+ def test_querydict_list_input_posts_key_but_no_values (self ):
507
+ """
508
+ When there are no keys passed, there is no default, and required=False
509
+ The field should return an array of 1 item, blank
510
+ """
511
+ class TestSerializer (serializers .Serializer ):
512
+ scores = serializers .ListField (required = False )
513
+
514
+ serializer = TestSerializer (data = QueryDict ('scores=&' ))
515
+ assert serializer .is_valid ()
516
+ assert serializer .validated_data == {'scores' : ['' ]}
517
+
469
518
470
519
class TestCreateOnlyDefault :
471
520
def setup (self ):
0 commit comments