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)  | 
