Skip to content

Commit af88a5b

Browse files
Test and fix which closes encode#652.
1 parent 092d522 commit af88a5b

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

rest_framework/serializers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,8 +649,14 @@ def get_default_fields(self):
649649
# Add the `read_only` flag to any fields that have bee specified
650650
# in the `read_only_fields` option
651651
for field_name in self.opts.read_only_fields:
652+
assert field_name not in self.base_fields.keys(), \
653+
"field '%s' on serializer '%s' specfied in " \
654+
"`read_only_fields`, but also added " \
655+
"as an explict field. Remove it from `read_only_fields`." % \
656+
(field_name, self.__class__.__name__)
652657
assert field_name in ret, \
653-
"read_only_fields on '%s' included invalid item '%s'" % \
658+
"Noexistant field '%s' specified in `read_only_fields` " \
659+
"on serializer '%s'." % \
654660
(self.__class__.__name__, field_name)
655661
ret[field_name].read_only = True
656662

rest_framework/tests/serializer.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ class Meta:
7878
read_only_fields = ('age',)
7979

8080

81+
class PersonSerializerInvalidReadOnly(serializers.ModelSerializer):
82+
"""
83+
Testing for #652.
84+
"""
85+
info = serializers.Field(source='info')
86+
87+
class Meta:
88+
model = Person
89+
fields = ('name', 'age', 'info')
90+
read_only_fields = ('age', 'info')
91+
92+
8193
class AlbumsSerializer(serializers.ModelSerializer):
8294

8395
class Meta:
@@ -189,6 +201,12 @@ def test_read_only_fields(self):
189201
# Assert age is unchanged (35)
190202
self.assertEqual(instance.age, self.person_data['age'])
191203

204+
def test_invalid_read_only_fields(self):
205+
"""
206+
Regression test for #652.
207+
"""
208+
self.assertRaises(AssertionError, PersonSerializerInvalidReadOnly, [])
209+
192210

193211
class DictStyleSerializer(serializers.Serializer):
194212
"""

0 commit comments

Comments
 (0)