mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 10:03:57 +03:00
This reverts commit e2a4559c03
.
This commit is contained in:
parent
09a0c551ca
commit
a677b09729
|
@ -603,12 +603,6 @@ class ListSerializer(BaseSerializer):
|
|||
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 @@ class ListSerializer(BaseSerializer):
|
|||
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:
|
||||
|
|
|
@ -2,7 +2,6 @@ import inspect
|
|||
import pickle
|
||||
import re
|
||||
import sys
|
||||
import unittest
|
||||
from collections import ChainMap
|
||||
from collections.abc import Mapping
|
||||
|
||||
|
@ -784,63 +783,3 @@ class TestSetValueMethod:
|
|||
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,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue
Block a user