@@ -286,6 +286,51 @@ def test_validate_html_input(self):
286286 assert serializer .validated_data == expected_output
287287
288288
289+ class TestListFieldHTMLInput :
290+ """
291+ Tests for ListField with HTML form input, including indexed keys.
292+ """
293+
294+ def test_listfield_with_indexed_keys (self ):
295+ """
296+ Test that indexed keys (e.g., field[0], field[1]) work correctly
297+ in HTML form submissions.
298+ """
299+ class CommunitySerializer (serializers .Serializer ):
300+ colors = serializers .ListField (
301+ allow_null = True ,
302+ child = serializers .CharField (label = 'Colors' , max_length = 7 ),
303+ required = False
304+ )
305+ # Simulate form data with indexed keys
306+ data = MultiValueDict ({
307+ 'colors[0]' : ['#ffffff' ],
308+ 'colors[1]' : ['#000000' ]
309+ })
310+ serializer = CommunitySerializer (data = data )
311+ assert serializer .is_valid ()
312+ assert 'colors' in serializer .validated_data
313+ assert serializer .validated_data ['colors' ] == ['#ffffff' , '#000000' ]
314+
315+ def test_listfield_standard_form_submission (self ):
316+ """
317+ Test standard HTML form list submission (e.g., multi-select).
318+ Ensures backward compatibility with existing behavior.
319+ """
320+ class CommunitySerializer (serializers .Serializer ):
321+ colors = serializers .ListField (
322+ child = serializers .CharField (label = 'Colors' , max_length = 7 ),
323+ required = True
324+ )
325+ # Standard multi-select form submission
326+ data = MultiValueDict ({
327+ 'colors' : ['#ffffff' , '#000000' , '#ff0000' ]
328+ })
329+ serializer = CommunitySerializer (data = data )
330+ assert serializer .is_valid ()
331+ assert serializer .validated_data ['colors' ] == ['#ffffff' , '#000000' , '#ff0000' ]
332+
333+
289334class TestNestedListSerializerAllowEmpty :
290335 """Tests the behavior of allow_empty=False when a ListSerializer is used as a field."""
291336
@@ -446,26 +491,6 @@ class CommunitySerializer(serializers.Serializer):
446491 assert 'colors' in serializer .validated_data
447492 assert serializer .validated_data ['colors' ] == ['#ffffff' , '#000000' ]
448493
449- def test_non_partial_listfield_with_indexed_keys (self ):
450- """
451- Test that indexed keys work correctly in non-partial updates.
452- """
453- class CommunitySerializer (serializers .Serializer ):
454- colors = serializers .ListField (
455- allow_null = True ,
456- child = serializers .CharField (label = 'Colors' , max_length = 7 ),
457- required = False
458- )
459- # Simulate form data with indexed keys
460- data = MultiValueDict ({
461- 'colors[0]' : ['#ffffff' ],
462- 'colors[1]' : ['#000000' ]
463- })
464- serializer = CommunitySerializer (data = data , partial = False )
465- assert serializer .is_valid ()
466- assert 'colors' in serializer .validated_data
467- assert serializer .validated_data ['colors' ] == ['#ffffff' , '#000000' ]
468-
469494 def test_listfield_mixed_plain_and_indexed_keys (self ):
470495 """
471496 Test that when both plain field and indexed keys are present,
@@ -509,24 +534,6 @@ class CommunitySerializer(serializers.Serializer):
509534 assert 'name' in serializer .validated_data
510535 assert 'colors' not in serializer .validated_data # Should be skipped
511536
512- def test_non_partial_listfield_standard_submission (self ):
513- """
514- Test standard HTML form list submission without partial=True.
515- Ensures backward compatibility with existing behavior.
516- """
517- class CommunitySerializer (serializers .Serializer ):
518- colors = serializers .ListField (
519- child = serializers .CharField (label = 'Colors' , max_length = 7 ),
520- required = True
521- )
522- # Standard multi-select form submission
523- data = MultiValueDict ({
524- 'colors' : ['#ffffff' , '#000000' , '#ff0000' ]
525- })
526- serializer = CommunitySerializer (data = data , partial = False )
527- assert serializer .is_valid ()
528- assert serializer .validated_data ['colors' ] == ['#ffffff' , '#000000' , '#ff0000' ]
529-
530537 def test_allow_empty_true (self ):
531538 class ListSerializer (serializers .Serializer ):
532539 update_field = serializers .IntegerField ()
0 commit comments