This commit is contained in:
Shrikant Sudam Giri 2026-01-08 03:37:56 -08:00 committed by GitHub
commit a1ce7fb34f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 1 deletions

View File

@ -130,7 +130,14 @@ class NestedBoundField(BoundField):
def __getitem__(self, key):
field = self.fields[key]
value = self.value.get(key) if self.value else None
error = self.errors.get(key) if isinstance(self.errors, dict) else None
if isinstance(self.errors, dict):
error = self.errors.get(key)
elif isinstance(self.errors, list):
error = {} # normalize list to empty dict for nested children
else:
error = None
if hasattr(field, 'fields'):
return NestedBoundField(field, value, error, prefix=self.name + '.')
elif getattr(field, '_is_jsonfield', False):

View File

@ -1,6 +1,7 @@
from django.http import QueryDict
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
class TestSimpleBoundField:
@ -211,6 +212,29 @@ class TestNestedBoundField:
rendered_packed = ''.join(rendered.split())
assert rendered_packed == expected_packed
def test_child_bound_field_after_parent_validation_error(self):
class ChildSerializer(serializers.Serializer):
value = serializers.CharField()
class ParentSerializer(serializers.Serializer):
nested = ChildSerializer()
def validate_nested(self, nested):
# Raise parent-level (non-field) validation error
raise ValidationError(["parent-level nested error"])
serializer = ParentSerializer(data={"nested": {"value": "ignored"}})
assert not serializer.is_valid()
# Parent-level error is a list (current problematic case)
assert serializer.errors["nested"] == ["parent-level nested error"]
parent_bound = serializer["nested"]
child_bound = parent_bound["value"]
assert isinstance(child_bound.errors, dict)
assert child_bound.errors == {}
assert child_bound.value == "ignored"
assert child_bound.name == "nested.value"
class TestJSONBoundField:
def test_as_form_fields(self):