diff options
| author | Tom Christie | 2013-03-22 12:33:09 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-03-22 12:33:09 +0000 |
| commit | c32d9969acaebc83ad1e2dd888d4a2829c35571e (patch) | |
| tree | e42dbe5b129b6f855c1982f89713ce45c3cdea91 /rest_framework/serializers.py | |
| parent | b2dc66448503c2120d943a2f282eab235afc67ba (diff) | |
| download | django-rest-framework-c32d9969acaebc83ad1e2dd888d4a2829c35571e.tar.bz2 | |
Add extra tests for errors from incorrect data with multiple create/update
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 34120dc6..3029cf1c 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -371,22 +371,30 @@ class BaseSerializer(Field): identities = [self.get_identity(self.to_native(obj)) for obj in objects] identity_to_objects = dict(zip(identities, objects)) - for item in data: - if update: - # Determine which object we're updating - try: - identity = self.get_identity(item) - except: - self.object = None - else: - self.object = identity_to_objects.pop(identity, None) + try: + iter(data) + if isinstance(data, dict): + raise TypeError + except TypeError: + self._errors = {'non_field_errors': ['Expected a list of items']} + else: + for item in data: + if update: + # Determine which object we're updating + try: + identity = self.get_identity(item) + except: + self.object = None + else: + self.object = identity_to_objects.pop(identity, None) + + ret.append(self.from_native(item, None)) + errors.append(self._errors) - ret.append(self.from_native(item, None)) - errors.append(self._errors) + if update: + self._deleted = identity_to_objects.values() - if update: - self._deleted = identity_to_objects.values() - self._errors = any(errors) and errors or [] + self._errors = any(errors) and errors or [] else: ret = self.from_native(data, files) |
