mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 05:04:31 +03:00
Test and fix which closes #652.
This commit is contained in:
parent
092d5223eb
commit
af88a5b175
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user