Skip to content

Commit 71ad99e

Browse files
author
Carlton Gibson
authored
Merge pull request #5388 from founders4schools/fix/named-source
Fix ModelSerializer custom named fields with source on model
2 parents 79be20a + 66b2c61 commit 71ad99e

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

rest_framework/serializers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,9 @@ def get_fields(self):
10101010
continue
10111011

10121012
extra_field_kwargs = extra_kwargs.get(field_name, {})
1013-
source = extra_field_kwargs.get('source', '*') != '*' or field_name
1013+
source = extra_field_kwargs.get('source', '*')
1014+
if source == '*':
1015+
source = field_name
10141016

10151017
# Determine the serializer field class and keyword arguments.
10161018
field_class, field_kwargs = self.build_field(

tests/test_model_serializer.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,3 +1135,24 @@ class Meta:
11351135
serializer = TestUniqueChoiceSerializer(data={'name': 'choice1'})
11361136
assert not serializer.is_valid()
11371137
assert serializer.errors == {'name': ['unique choice model with this name already exists.']}
1138+
1139+
1140+
class TestFieldSource(TestCase):
1141+
def test_named_field_source(self):
1142+
class TestSerializer(serializers.ModelSerializer):
1143+
1144+
class Meta:
1145+
model = RegularFieldsModel
1146+
fields = ('number_field',)
1147+
extra_kwargs = {
1148+
'number_field': {
1149+
'source': 'integer_field'
1150+
}
1151+
}
1152+
1153+
expected = dedent("""
1154+
TestSerializer():
1155+
number_field = IntegerField(source='integer_field')
1156+
""")
1157+
self.maxDiff = None
1158+
self.assertEqual(unicode_repr(TestSerializer()), expected)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy