diff --git a/rest_framework/compound_fields.py b/rest_framework/compound_fields.py index cbdb95988..95c67ddc8 100644 --- a/rest_framework/compound_fields.py +++ b/rest_framework/compound_fields.py @@ -6,12 +6,6 @@ from .fields import WritableField from .serializers import BaseSerializer -def field_or_serializer_from_native(field_or_serializer, data): - if isinstance(field_or_serializer, BaseSerializer): - return field_or_serializer.from_native(data, None) - return field_or_serializer.from_native(data) - - class ListField(WritableField): """ A field whose values are lists of items described by the given item field. The item field can @@ -23,18 +17,17 @@ class ListField(WritableField): self.item_field = item_field def to_native(self, obj): - if obj: + if self.item_field and obj: return [ - self.item_field.to_native(item) if self.item_field else item + self.item_field.to_native(item) for item in obj ] return obj def from_native(self, data): - if data: + if self.item_field and data: return [ - field_or_serializer_from_native(self.item_field, item_data) - if self.item_field else item_data + self.item_field.from_native(item_data) for item_data in data ] return data @@ -51,21 +44,17 @@ class DictField(WritableField): self.value_field = value_field def to_native(self, obj): - if obj: + if self.value_field and obj: return dict( - (key, self.value_field.to_native(value) if self.value_field else value) + (unicode(key), self.value_field.to_native(value)) for key, value in obj.items() ) return obj def from_native(self, data): - if data: + if self.value_field and data: return dict( - ( - unicode(key), - field_or_serializer_from_native(self.value_field, value) - if self.value_field else value - ) + (unicode(key), self.value_field.from_native(value)) for key, value in data.items() ) return data diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8351b3df6..27db7b962 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -331,7 +331,7 @@ class BaseSerializer(WritableField): return ret - def from_native(self, data, files): + def from_native(self, data, files=None): """ Deserialize primitives -> objects. """