mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +03:00
Add get_read_only_fields method to Modelserializer.
This commit is contained in:
parent
809a6acd36
commit
540fc0ca8c
|
@ -1333,6 +1333,9 @@ class ModelSerializer(Serializer):
|
||||||
|
|
||||||
# Methods for determining additional keyword arguments to apply...
|
# Methods for determining additional keyword arguments to apply...
|
||||||
|
|
||||||
|
def get_read_only_fields(self):
|
||||||
|
return getattr(self.Meta, 'read_only_fields', None)
|
||||||
|
|
||||||
def get_extra_kwargs(self):
|
def get_extra_kwargs(self):
|
||||||
"""
|
"""
|
||||||
Return a dictionary mapping field names to a dictionary of
|
Return a dictionary mapping field names to a dictionary of
|
||||||
|
@ -1340,7 +1343,7 @@ class ModelSerializer(Serializer):
|
||||||
"""
|
"""
|
||||||
extra_kwargs = copy.deepcopy(getattr(self.Meta, 'extra_kwargs', {}))
|
extra_kwargs = copy.deepcopy(getattr(self.Meta, 'extra_kwargs', {}))
|
||||||
|
|
||||||
read_only_fields = getattr(self.Meta, 'read_only_fields', None)
|
read_only_fields = self.get_read_only_fields()
|
||||||
if read_only_fields is not None:
|
if read_only_fields is not None:
|
||||||
if not isinstance(read_only_fields, (list, tuple)):
|
if not isinstance(read_only_fields, (list, tuple)):
|
||||||
raise TypeError(
|
raise TypeError(
|
||||||
|
|
|
@ -154,6 +154,57 @@ class TestModelSerializer(TestCase):
|
||||||
with self.assertRaisesMessage(ValueError, msginitial):
|
with self.assertRaisesMessage(ValueError, msginitial):
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
|
|
||||||
|
def test_read_only_fields(self):
|
||||||
|
class TestModel(models.Model):
|
||||||
|
field1 = models.CharField(max_length=255)
|
||||||
|
field2 = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
class TestSerializer1(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = TestModel
|
||||||
|
read_only_fields = ('field1',)
|
||||||
|
fields = ('field1', 'field2')
|
||||||
|
|
||||||
|
class TestSerializer2(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = TestModel
|
||||||
|
read_only_fields = ('field1',)
|
||||||
|
fields = ('field1', 'field2')
|
||||||
|
|
||||||
|
def get_read_only_fields(self):
|
||||||
|
return ('field2',)
|
||||||
|
|
||||||
|
class TestSerializer3(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = TestModel
|
||||||
|
read_only_fields = ('field1',)
|
||||||
|
fields = ('field1', 'field2')
|
||||||
|
|
||||||
|
def get_read_only_fields(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
test_expected1 = dedent("""
|
||||||
|
TestSerializer1():
|
||||||
|
field1 = CharField(read_only=True)
|
||||||
|
field2 = CharField(max_length=255)
|
||||||
|
""")
|
||||||
|
|
||||||
|
test_expected2 = dedent("""
|
||||||
|
TestSerializer2():
|
||||||
|
field1 = CharField(max_length=255)
|
||||||
|
field2 = CharField(read_only=True)
|
||||||
|
""")
|
||||||
|
|
||||||
|
test_expected3 = dedent("""
|
||||||
|
TestSerializer3():
|
||||||
|
field1 = CharField(max_length=255)
|
||||||
|
field2 = CharField(max_length=255)
|
||||||
|
""")
|
||||||
|
|
||||||
|
self.assertEqual(repr(TestSerializer1()), test_expected1)
|
||||||
|
self.assertEqual(repr(TestSerializer2()), test_expected2)
|
||||||
|
self.assertEqual(repr(TestSerializer3()), test_expected3)
|
||||||
|
|
||||||
|
|
||||||
class TestRegularFieldMappings(TestCase):
|
class TestRegularFieldMappings(TestCase):
|
||||||
def test_regular_fields(self):
|
def test_regular_fields(self):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user