diff options
| author | Tom Christie | 2015-01-21 20:29:58 +0000 | 
|---|---|---|
| committer | Tom Christie | 2015-01-21 20:29:58 +0000 | 
| commit | 5e52f0fd8c3b4dbe70f1332d1323e3a544951e66 (patch) | |
| tree | 61eab5961b51ad29072c7de0f4570bf648bc192f /rest_framework | |
| parent | e5b94f7b7bbf2f6f35c5e33fb2723bdb0d33bad3 (diff) | |
| parent | 9ec08ce57889dc329506a572044438a55da61303 (diff) | |
| download | django-rest-framework-5e52f0fd8c3b4dbe70f1332d1323e3a544951e66.tar.bz2 | |
Merge branch 'version-3.1' into cursor-pagination
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/compat.py | 2 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 12 | ||||
| -rw-r--r-- | rest_framework/utils/serializer_helpers.py | 3 | 
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) | 
