File tree Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -649,8 +649,14 @@ def get_default_fields(self):
649
649
# Add the `read_only` flag to any fields that have bee specified
650
650
# in the `read_only_fields` option
651
651
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__ )
652
657
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'." % \
654
660
(self .__class__ .__name__ , field_name )
655
661
ret [field_name ].read_only = True
656
662
Original file line number Diff line number Diff line change @@ -78,6 +78,18 @@ class Meta:
78
78
read_only_fields = ('age' ,)
79
79
80
80
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
+
81
93
class AlbumsSerializer (serializers .ModelSerializer ):
82
94
83
95
class Meta :
@@ -189,6 +201,12 @@ def test_read_only_fields(self):
189
201
# Assert age is unchanged (35)
190
202
self .assertEqual (instance .age , self .person_data ['age' ])
191
203
204
+ def test_invalid_read_only_fields (self ):
205
+ """
206
+ Regression test for #652.
207
+ """
208
+ self .assertRaises (AssertionError , PersonSerializerInvalidReadOnly , [])
209
+
192
210
193
211
class DictStyleSerializer (serializers .Serializer ):
194
212
"""
You can’t perform that action at this time.
0 commit comments