diff options
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 8 | ||||
| -rw-r--r-- | rest_framework/tests/serializer.py | 18 | 
2 files changed, 25 insertions, 1 deletions
| diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ecff2c52..7707de7a 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -649,8 +649,14 @@ class ModelSerializer(Serializer):          # Add the `read_only` flag to any fields that have bee specified          # in the `read_only_fields` option          for field_name in self.opts.read_only_fields: +            assert field_name not in self.base_fields.keys(), \ +                "field '%s' on serializer '%s' specfied in " \ +                "`read_only_fields`, but also added " \ +                "as an explict field.  Remove it from `read_only_fields`." % \ +                (field_name, self.__class__.__name__)              assert field_name in ret, \ -                "read_only_fields on '%s' included invalid item '%s'" % \ +                "Noexistant field '%s' specified in `read_only_fields` " \ +                "on serializer '%s'." % \                  (self.__class__.__name__, field_name)              ret[field_name].read_only = True diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 84e1ee4e..db3881f9 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -78,6 +78,18 @@ class PersonSerializer(serializers.ModelSerializer):          read_only_fields = ('age',) +class PersonSerializerInvalidReadOnly(serializers.ModelSerializer): +    """ +    Testing for #652. +    """ +    info = serializers.Field(source='info') + +    class Meta: +        model = Person +        fields = ('name', 'age', 'info') +        read_only_fields = ('age', 'info') + +  class AlbumsSerializer(serializers.ModelSerializer):      class Meta: @@ -189,6 +201,12 @@ class BasicTests(TestCase):          # Assert age is unchanged (35)          self.assertEqual(instance.age, self.person_data['age']) +    def test_invalid_read_only_fields(self): +        """ +        Regression test for #652. +        """ +        self.assertRaises(AssertionError, PersonSerializerInvalidReadOnly, []) +  class DictStyleSerializer(serializers.Serializer):      """ | 
