Skip to content

Commit f7025cf

Browse files
committed
Merge pull request #3805 from kewama/issue-3804
Fixes #3804, avoiding update of Meta.extra_kwargs
2 parents c46ed66 + 7cd3933 commit f7025cf

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

rest_framework/serializers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,7 @@ def get_extra_kwargs(self):
12121212
Return a dictionary mapping field names to a dictionary of
12131213
additional keyword arguments.
12141214
"""
1215-
extra_kwargs = getattr(self.Meta, 'extra_kwargs', {})
1215+
extra_kwargs = copy.deepcopy(getattr(self.Meta, 'extra_kwargs', {}))
12161216

12171217
read_only_fields = getattr(self.Meta, 'read_only_fields', None)
12181218
if read_only_fields is not None:

tests/test_model_serializer.py

+31
Original file line numberDiff line numberDiff line change
@@ -909,3 +909,34 @@ class Meta:
909909
serializer = TestSerializer()
910910

911911
assert serializer.fields['decimal_field'].max_value == 3
912+
913+
914+
class TestMetaInheritance(TestCase):
915+
def test_extra_kwargs_not_altered(self):
916+
class TestSerializer(serializers.ModelSerializer):
917+
non_model_field = serializers.CharField()
918+
919+
class Meta:
920+
model = OneFieldModel
921+
read_only_fields = ('char_field', 'non_model_field')
922+
fields = read_only_fields
923+
extra_kwargs = {}
924+
925+
class ChildSerializer(TestSerializer):
926+
class Meta(TestSerializer.Meta):
927+
read_only_fields = ()
928+
929+
test_expected = dedent("""
930+
TestSerializer():
931+
char_field = CharField(read_only=True)
932+
non_model_field = CharField()
933+
""")
934+
935+
child_expected = dedent("""
936+
ChildSerializer():
937+
char_field = CharField(max_length=100)
938+
non_model_field = CharField()
939+
""")
940+
self.assertEqual(unicode_repr(ChildSerializer()), child_expected)
941+
self.assertEqual(unicode_repr(TestSerializer()), test_expected)
942+
self.assertEqual(unicode_repr(ChildSerializer()), child_expected)

0 commit comments

Comments
 (0)