Skip to content

Commit d2286ba

Browse files
author
Carlton Gibson
authored
Merge pull request #5326 from limdauto/limdauto-patch-1
Fix introspection of list field in schema
2 parents 4d5e846 + 56021f9 commit d2286ba

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

rest_framework/schemas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def field_to_schema(field):
3030
title = force_text(field.label) if field.label else ''
3131
description = force_text(field.help_text) if field.help_text else ''
3232

33-
if isinstance(field, serializers.ListSerializer):
33+
if isinstance(field, (serializers.ListSerializer, serializers.ListField)):
3434
child_schema = field_to_schema(field.child)
3535
return coreschema.Array(
3636
items=child_schema,

tests/test_schemas.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ class ExampleSerializer(serializers.Serializer):
3939
hidden = serializers.HiddenField(default='hello')
4040

4141

42+
class AnotherSerializerWithListFields(serializers.Serializer):
43+
a = serializers.ListField(child=serializers.IntegerField())
44+
b = serializers.ListSerializer(child=serializers.CharField())
45+
46+
4247
class AnotherSerializer(serializers.Serializer):
4348
c = serializers.CharField(required=True)
4449
d = serializers.CharField(required=False)
@@ -57,6 +62,13 @@ def custom_action(self, request, pk):
5762
"""
5863
return super(ExampleSerializer, self).retrieve(self, request)
5964

65+
@detail_route(methods=['post'], serializer_class=AnotherSerializerWithListFields)
66+
def custom_action_with_list_fields(self, request, pk):
67+
"""
68+
A custom action using both list field and list serializer in the serializer.
69+
"""
70+
return super(ExampleSerializer, self).retrieve(self, request)
71+
6072
@list_route()
6173
def custom_list_action(self, request):
6274
return super(ExampleViewSet, self).list(self, request)
@@ -174,6 +186,17 @@ def test_authenticated_request(self):
174186
coreapi.Field('d', required=False, location='form', schema=coreschema.String(title='D')),
175187
]
176188
),
189+
'custom_action_with_list_fields': coreapi.Link(
190+
url='/example/{id}/custom_action_with_list_fields/',
191+
action='post',
192+
encoding='application/json',
193+
description='A custom action using both list field and list serializer in the serializer.',
194+
fields=[
195+
coreapi.Field('id', required=True, location='path', schema=coreschema.String()),
196+
coreapi.Field('a', required=True, location='form', schema=coreschema.Array(title='A', items=coreschema.Integer())),
197+
coreapi.Field('b', required=True, location='form', schema=coreschema.Array(title='B', items=coreschema.String())),
198+
]
199+
),
177200
'custom_list_action': coreapi.Link(
178201
url='/example/custom_list_action/',
179202
action='get'

0 commit comments

Comments
 (0)