mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-16 03:02:37 +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
|
# Add the `read_only` flag to any fields that have bee specified
|
||||||
# in the `read_only_fields` option
|
# in the `read_only_fields` option
|
||||||
for field_name in self.opts.read_only_fields:
|
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, \
|
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)
|
(self.__class__.__name__, field_name)
|
||||||
ret[field_name].read_only = True
|
ret[field_name].read_only = True
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,18 @@ class PersonSerializer(serializers.ModelSerializer):
|
||||||
read_only_fields = ('age',)
|
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 AlbumsSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -189,6 +201,12 @@ class BasicTests(TestCase):
|
||||||
# Assert age is unchanged (35)
|
# Assert age is unchanged (35)
|
||||||
self.assertEqual(instance.age, self.person_data['age'])
|
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):
|
class DictStyleSerializer(serializers.Serializer):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user