aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2015-01-21 20:29:58 +0000
committerTom Christie2015-01-21 20:29:58 +0000
commit5e52f0fd8c3b4dbe70f1332d1323e3a544951e66 (patch)
tree61eab5961b51ad29072c7de0f4570bf648bc192f /rest_framework
parente5b94f7b7bbf2f6f35c5e33fb2723bdb0d33bad3 (diff)
parent9ec08ce57889dc329506a572044438a55da61303 (diff)
downloaddjango-rest-framework-5e52f0fd8c3b4dbe70f1332d1323e3a544951e66.tar.bz2
Merge branch 'version-3.1' into cursor-pagination
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/compat.py2
-rw-r--r--rest_framework/serializers.py12
-rw-r--r--rest_framework/utils/serializer_helpers.py3
3 files changed, 14 insertions, 3 deletions
diff --git a/rest_framework/compat.py b/rest_framework/compat.py
index bd3802ad..a6620057 100644
--- a/rest_framework/compat.py
+++ b/rest_framework/compat.py
@@ -18,7 +18,7 @@ def unicode_repr(instance):
# Get the repr of an instance, but ensure it is a unicode string
# on both python 3 (already the case) and 2 (not the case).
if six.PY2:
- repr(instance).decode('utf-8')
+ return repr(instance).decode('utf-8')
return repr(instance)
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 77d3f202..b91ecebc 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -253,7 +253,7 @@ class SerializerMetaclass(type):
# If this class is subclassing another Serializer, add that Serializer's
# fields. Note that we loop over the bases in *reverse*. This is necessary
# in order to maintain the correct order of fields.
- for base in bases[::-1]:
+ for base in reversed(bases):
if hasattr(base, '_declared_fields'):
fields = list(base._declared_fields.items()) + fields
@@ -899,7 +899,15 @@ class ModelSerializer(Serializer):
if fields is not None:
# Ensure that all declared fields have also been included in the
# `Meta.fields` option.
- for field_name in declared_fields:
+
+ # Do not require any fields that are declared a parent class,
+ # in order to allow serializer subclasses to only include
+ # a subset of fields.
+ required_field_names = set(declared_fields)
+ for cls in self.__class__.__bases__:
+ required_field_names -= set(getattr(cls, '_declared_fields', []))
+
+ for field_name in required_field_names:
assert field_name in fields, (
"The field '{field_name}' was declared on serializer "
"{serializer_class}, but has not been included in the "
diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py
index f9960603..ab057862 100644
--- a/rest_framework/utils/serializer_helpers.py
+++ b/rest_framework/utils/serializer_helpers.py
@@ -105,3 +105,6 @@ class BindingDict(collections.MutableMapping):
def __len__(self):
return len(self.fields)
+
+ def __repr__(self):
+ return dict.__repr__(self.fields)