|
1 | 1 | from django.http import QueryDict |
2 | 2 |
|
3 | 3 | from rest_framework import serializers |
| 4 | +from rest_framework.exceptions import ValidationError |
4 | 5 |
|
5 | 6 |
|
6 | 7 | class TestSimpleBoundField: |
@@ -211,6 +212,28 @@ class ExampleSerializer(serializers.Serializer): |
211 | 212 | rendered_packed = ''.join(rendered.split()) |
212 | 213 | assert rendered_packed == expected_packed |
213 | 214 |
|
| 215 | + def test_child_bound_field_after_parent_validation_error(self): |
| 216 | + class ChildSerializer(serializers.Serializer): |
| 217 | + value = serializers.CharField() |
| 218 | + |
| 219 | + class ParentSerializer(serializers.Serializer): |
| 220 | + nested = ChildSerializer() |
| 221 | + |
| 222 | + def validate_nested(self, nested): |
| 223 | + # Raise parent-level (non-field) validation error |
| 224 | + raise ValidationError(["parent-level nested error"]) |
| 225 | + |
| 226 | + serializer = ParentSerializer(data={"nested": {"value": "ignored"}}) |
| 227 | + assert not serializer.is_valid() |
| 228 | + |
| 229 | + # Parent-level error is a list (current problematic case) |
| 230 | + assert serializer.errors["nested"] == ["parent-level nested error"] |
| 231 | + parent_bound = serializer["nested"] |
| 232 | + child_bound = parent_bound["value"] |
| 233 | + assert child_bound.errors is None |
| 234 | + assert child_bound.value == "ignored" |
| 235 | + assert child_bound.name == "nested.value" |
| 236 | + |
214 | 237 |
|
215 | 238 | class TestJSONBoundField: |
216 | 239 | def test_as_form_fields(self): |
|
0 commit comments