@@ -69,3 +69,59 @@ def test_multipart_validate(self):
6969 input_data = QueryDict ('nested[one]=1' )
7070 serializer = self .Serializer (data = input_data )
7171 assert serializer .is_valid ()
72+
73+
74+ class TestNestedSerializerWithMany :
75+ def setup (self ):
76+ class NestedSerializer (serializers .Serializer ):
77+ example = serializers .IntegerField (max_value = 10 )
78+
79+ class TestSerializer (serializers .Serializer ):
80+ allow_null = NestedSerializer (many = True , allow_null = True )
81+ not_allow_null = NestedSerializer (many = True )
82+
83+ self .Serializer = TestSerializer
84+
85+ def test_null_allowed_if_allow_null_is_set (self ):
86+ input_data = {
87+ 'allow_null' : None ,
88+ 'not_allow_null' : [{'example' : '2' }, {'example' : '3' }]
89+ }
90+ expected_data = {
91+ 'allow_null' : None ,
92+ 'not_allow_null' : [{'example' : 2 }, {'example' : 3 }]
93+ }
94+ serializer = self .Serializer (data = input_data )
95+
96+ assert serializer .is_valid (), serializer .errors
97+ assert serializer .validated_data == expected_data
98+
99+ def test_null_is_not_allowed_if_allow_null_is_not_set (self ):
100+ input_data = {
101+ 'allow_null' : None ,
102+ 'not_allow_null' : None
103+ }
104+ serializer = self .Serializer (data = input_data )
105+
106+ assert not serializer .is_valid ()
107+
108+ expected_errors = {'not_allow_null' : [serializer .error_messages ['null' ]]}
109+ assert serializer .errors == expected_errors
110+
111+ def test_run_the_field_validation_even_if_the_field_is_null (self ):
112+ class TestSerializer (self .Serializer ):
113+ validation_was_run = False
114+
115+ def validate_allow_null (self , value ):
116+ TestSerializer .validation_was_run = True
117+ return value
118+
119+ input_data = {
120+ 'allow_null' : None ,
121+ 'not_allow_null' : [{'example' : 2 }]
122+ }
123+ serializer = TestSerializer (data = input_data )
124+
125+ assert serializer .is_valid ()
126+ assert serializer .validated_data == input_data
127+ assert TestSerializer .validation_was_run
0 commit comments