aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorPablo Recio2013-05-18 12:51:40 +0200
committerPablo Recio2013-05-18 12:51:40 +0200
commit53a80044016c2ea0f4551735b0f974d1571d52ee (patch)
treeb79711fc0854ea614f8a51c850fda870e4d07630 /rest_framework/fields.py
parentab8bd566f9db327a4c463317011818d421bbf89c (diff)
parent2a3056d03844a31373f1e30aec58e70616115838 (diff)
downloaddjango-rest-framework-53a80044016c2ea0f4551735b0f974d1571d52ee.tar.bz2
Merge branch 'master' into 725-blank-choice-dash
Conflicts: rest_framework/tests/fields.py
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 7fd4c638..9bbe6633 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -20,6 +20,7 @@ from django import forms
from django.forms import widgets
from django.utils.encoding import is_protected_type
from django.utils.translation import ugettext_lazy as _
+from django.utils.datastructures import SortedDict
from rest_framework import ISO_8601
from rest_framework.compat import timezone, parse_date, parse_datetime, parse_time
@@ -171,7 +172,11 @@ class Field(object):
elif hasattr(value, '__iter__') and not isinstance(value, (dict, six.string_types)):
return [self.to_native(item) for item in value]
elif isinstance(value, dict):
- return dict(map(self.to_native, (k, v)) for k, v in value.items())
+ # Make sure we preserve field ordering, if it exists
+ ret = SortedDict()
+ for key, val in value.items():
+ ret[key] = self.to_native(val)
+ return ret
return smart_text(value)
def attributes(self):