File tree Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Original file line number Diff line number Diff line change @@ -214,10 +214,9 @@ def _map_field(self, field):
214
214
'items' : self ._map_serializer (field .child )
215
215
}
216
216
if isinstance (field , serializers .Serializer ):
217
- return {
218
- 'type' : 'object' ,
219
- 'properties' : self ._map_serializer (field )
220
- }
217
+ data = self ._map_serializer (field )
218
+ data ['type' ] = 'object'
219
+ return data
221
220
222
221
# Related fields.
223
222
if isinstance (field , serializers .ManyRelatedField ):
Original file line number Diff line number Diff line change @@ -130,6 +130,36 @@ class View(generics.GenericAPIView):
130
130
assert responses ['200' ]['content' ]['application/json' ]['schema' ]['required' ] == ['text' ]
131
131
assert list (responses ['200' ]['content' ]['application/json' ]['schema' ]['properties' ].keys ()) == ['text' ]
132
132
133
+ def test_response_body_nested_serializer (self ):
134
+ path = '/'
135
+ method = 'POST'
136
+
137
+ class NestedSerializer (serializers .Serializer ):
138
+ number = serializers .IntegerField ()
139
+
140
+ class Serializer (serializers .Serializer ):
141
+ text = serializers .CharField ()
142
+ nested = NestedSerializer ()
143
+
144
+ class View (generics .GenericAPIView ):
145
+ serializer_class = Serializer
146
+
147
+ view = create_view (
148
+ View ,
149
+ method ,
150
+ create_request (path ),
151
+ )
152
+ inspector = AutoSchema ()
153
+ inspector .view = view
154
+
155
+ responses = inspector ._get_responses (path , method )
156
+ schema = responses ['200' ]['content' ]['application/json' ]['schema' ]
157
+ assert sorted (schema ['required' ]) == ['nested' , 'text' ]
158
+ assert sorted (list (schema ['properties' ].keys ())) == ['nested' , 'text' ]
159
+ assert schema ['properties' ]['nested' ]['type' ] == 'object'
160
+ assert list (schema ['properties' ]['nested' ]['properties' ].keys ()) == ['number' ]
161
+ assert schema ['properties' ]['nested' ]['required' ] == ['number' ]
162
+
133
163
134
164
@pytest .mark .skipif (uritemplate is None , reason = 'uritemplate not installed.' )
135
165
@override_settings (REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS' : 'rest_framework.schemas.openapi.AutoSchema' })
You can’t perform that action at this time.
0 commit comments