mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 01:49:50 +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...
|
||||
|
||||
def get_read_only_fields(self):
|
||||
return getattr(self.Meta, 'read_only_fields', None)
|
||||
|
||||
def get_extra_kwargs(self):
|
||||
"""
|
||||
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', {}))
|
||||
|
||||
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 not isinstance(read_only_fields, (list, tuple)):
|
||||
raise TypeError(
|
||||
|
|
|
@ -154,6 +154,57 @@ class TestModelSerializer(TestCase):
|
|||
with self.assertRaisesMessage(ValueError, msginitial):
|
||||
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):
|
||||
def test_regular_fields(self):
|
||||
|
|
Loading…
Reference in New Issue
Block a user