aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 459f8a8c..13e57939 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -14,7 +14,8 @@ from django.core import validators
from django.core.exceptions import ValidationError
from django.db import models
from django.utils import six
-from collections import namedtuple, OrderedDict
+from django.utils.datastructures import SortedDict
+from collections import namedtuple
from rest_framework.compat import clean_manytomany_helptext
from rest_framework.fields import empty, set_value, Field, SkipField
from rest_framework.settings import api_settings
@@ -91,10 +92,10 @@ class BaseSerializer(Field):
if self.instance is not None:
self._data = self.to_primative(self.instance)
elif self._initial_data is not None:
- self._data = {
- field_name: field.get_value(self._initial_data)
+ self._data = dict([
+ (field_name, field.get_value(self._initial_data))
for field_name, field in self.fields.items()
- }
+ ])
else:
self._data = self.get_initial()
return self._data
@@ -137,7 +138,7 @@ class SerializerMetaclass(type):
if hasattr(base, 'base_fields'):
fields = list(base.base_fields.items()) + fields
- return OrderedDict(fields)
+ return SortedDict(fields)
def __new__(cls, name, bases, attrs):
attrs['base_fields'] = cls._get_fields(bases, attrs)
@@ -180,10 +181,10 @@ class Serializer(BaseSerializer):
field.bind(field_name, self, root)
def get_initial(self):
- return {
- field.field_name: field.get_initial()
+ return dict([
+ (field.field_name, field.get_initial())
for field in self.fields.values()
- }
+ ])
def get_value(self, dictionary):
# We override the default field access in order to support
@@ -222,14 +223,14 @@ class Serializer(BaseSerializer):
try:
return self.validate(ret)
- except ValidationError, exc:
+ except ValidationError as exc:
raise ValidationError({'non_field_errors': exc.messages})
def to_primative(self, instance):
"""
Object instance -> Dict of primitive datatypes.
"""
- ret = OrderedDict()
+ ret = SortedDict()
fields = [field for field in self.fields.values() if not field.write_only]
for field in fields:
@@ -368,7 +369,7 @@ class ModelSerializer(Serializer):
# If `fields` is set on the `Meta` class,
# then use only those fields, and in that order.
if self.opts.fields:
- fields = OrderedDict([
+ fields = SortedDict([
(key, fields[key]) for key in self.opts.fields
])
@@ -379,7 +380,7 @@ class ModelSerializer(Serializer):
Return all the fields that should be serialized for the model.
"""
info = modelinfo.get_field_info(self.opts.model)
- ret = OrderedDict()
+ ret = SortedDict()
serializer_url_field = self.get_url_field()
if serializer_url_field: