diff options
| author | Tom Christie | 2012-10-08 12:52:56 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-10-08 12:52:56 +0100 | 
| commit | 52ba2e333375c6829fb89b6b43e4d19b2f2a86a4 (patch) | |
| tree | d45e35751961ae6cac9813a2af073098b32f7e7e /rest_framework/serializers.py | |
| parent | 4fd8ab17a3e935d72bb4ec25ed8f16a21ec2c0ef (diff) | |
| download | django-rest-framework-52ba2e333375c6829fb89b6b43e4d19b2f2a86a4.tar.bz2 | |
Fix #285
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 23 | 
1 files changed, 13 insertions, 10 deletions
| diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ba8bf8ad..1770c4ce 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -2,7 +2,6 @@ import copy  import datetime  import types  from decimal import Decimal -from django.core.serializers.base import DeserializedObject  from django.db import models  from django.utils.datastructures import SortedDict  from rest_framework.compat import get_concrete_model @@ -224,9 +223,6 @@ class BaseSerializer(Field):          """          Serialize objects -> primatives.          """ -        if isinstance(obj, DeserializedObject): -            obj = obj.object -          if isinstance(obj, dict):              return dict([(key, self.to_native(val))                           for (key, val) in obj.items()]) @@ -383,23 +379,30 @@ class ModelSerializer(Serializer):          """          Restore the model instance.          """ +        self.m2m_data = {} +          if instance:              for key, val in attrs.items():                  setattr(instance, key, val) -            return DeserializedObject(instance) +            return instance -        m2m_data = {}          for field in self.opts.model._meta.many_to_many:              if field.name in attrs: -                m2m_data[field.name] = attrs.pop(field.name) -        return DeserializedObject(self.opts.model(**attrs), m2m_data) +                self.m2m_data[field.name] = attrs.pop(field.name) +        return self.opts.model(**attrs) -    def save(self): +    def save(self, save_m2m=True):          """          Save the deserialized object and return it.          """          self.object.save() -        return self.object.object + +        if self.m2m_data and save_m2m: +            for accessor_name, object_list in self.m2m_data.items(): +                setattr(self.object, accessor_name, object_list) +            self.m2m_data = {} + +        return self.object  class HyperlinkedModelSerializerOptions(ModelSerializerOptions): | 
