From a677b09729ed71014d65b90a86f75c47bf7ae32f Mon Sep 17 00:00:00 2001 From: Asif Saif Uddin Date: Wed, 13 Mar 2024 21:15:43 +0600 Subject: [PATCH] Revert "Fix validation for ListSerializer (#8979)" (#9283) This reverts commit e2a4559c03247f69e85b2e0e7ede4e8b6201adc2. --- rest_framework/serializers.py | 14 +------- tests/test_serializer.py | 61 ----------------------------------- 2 files changed, 1 insertion(+), 74 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index eee18ddd48..b1b7b64774 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -603,12 +603,6 @@ def __init__(self, *args, **kwargs): self.min_length = kwargs.pop('min_length', None) assert self.child is not None, '`child` is a required argument.' assert not inspect.isclass(self.child), '`child` has not been instantiated.' - - instance = kwargs.get('instance', []) - data = kwargs.get('data', []) - if instance and data: - assert len(data) == len(instance), 'Data and instance should have same length' - super().__init__(*args, **kwargs) self.child.bind(field_name='', parent=self) @@ -694,13 +688,7 @@ def to_internal_value(self, data): ret = [] errors = [] - for idx, item in enumerate(data): - if ( - hasattr(self, 'instance') - and self.instance - and len(self.instance) > idx - ): - self.child.instance = self.instance[idx] + for item in data: try: validated = self.run_child_validation(item) except ValidationError as exc: diff --git a/tests/test_serializer.py b/tests/test_serializer.py index 39d9238ef9..10fa8afb94 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -2,7 +2,6 @@ import pickle import re import sys -import unittest from collections import ChainMap from collections.abc import Mapping @@ -784,63 +783,3 @@ def test_nested_key(self): ret = {'a': 1} self.s.set_value(ret, ['x', 'y'], 2) assert ret == {'a': 1, 'x': {'y': 2}} - - -class MyClass(models.Model): - name = models.CharField(max_length=100) - value = models.CharField(max_length=100, blank=True) - - app_label = "test" - - @property - def is_valid(self): - return self.name == 'valid' - - -class MyClassSerializer(serializers.ModelSerializer): - class Meta: - model = MyClass - fields = ('id', 'name', 'value') - - def validate_value(self, value): - if value and not self.instance.is_valid: - raise serializers.ValidationError( - 'Status cannot be set for invalid instance') - return value - - -class TestMultipleObjectsValidation(unittest.TestCase): - def setUp(self): - self.objs = [ - MyClass(name='valid'), - MyClass(name='invalid'), - MyClass(name='other'), - ] - - def test_multiple_objects_are_validated_separately(self): - - serializer = MyClassSerializer( - data=[{'value': 'set', 'id': instance.id} for instance in - self.objs], - instance=self.objs, - many=True, - partial=True, - ) - - assert not serializer.is_valid() - assert serializer.errors == [ - {}, - {'value': ['Status cannot be set for invalid instance']}, - {'value': ['Status cannot be set for invalid instance']} - ] - - def test_exception_raised_when_data_and_instance_length_different(self): - - with self.assertRaises(AssertionError): - MyClassSerializer( - data=[{'value': 'set', 'id': instance.id} for instance in - self.objs], - instance=self.objs[:-1], - many=True, - partial=True, - )