Skip to content

Commit

Permalink
Revert "Fix validation for ListSerializer (#8979)" (#9283)
Browse files Browse the repository at this point in the history
This reverts commit e2a4559.
  • Loading branch information
auvipy committed Mar 13, 2024
1 parent 09a0c55 commit a677b09
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 74 deletions.
14 changes: 1 addition & 13 deletions rest_framework/serializers.py
Expand Up @@ -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)

Expand Down Expand Up @@ -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:
Expand Down
61 changes: 0 additions & 61 deletions tests/test_serializer.py
Expand Up @@ -2,7 +2,6 @@
import pickle
import re
import sys
import unittest
from collections import ChainMap
from collections.abc import Mapping

Expand Down Expand Up @@ -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,
)

0 comments on commit a677b09

Please sign in to comment.