aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2013-03-22 12:33:09 +0000
committerTom Christie2013-03-22 12:33:09 +0000
commitc32d9969acaebc83ad1e2dd888d4a2829c35571e (patch)
treee42dbe5b129b6f855c1982f89713ce45c3cdea91 /rest_framework/serializers.py
parentb2dc66448503c2120d943a2f282eab235afc67ba (diff)
downloaddjango-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.py36
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)