diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 88b1ba4e..32434344 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -11,6 +11,7 @@ Current - Fix `@api.expect(..., validate=False)` decorators for an :class:`Api` where `validate=True` is set on the constructor (:issue:`609`, :pr:`610`) - Ensure `basePath` is always a path - Hide Namespaces with all hidden Resources from Swagger documentation +- In register_model() when working with SchemaModel type, also recursively register nested models 0.12.1 (2018-09-28) ------------------- diff --git a/flask_restplus/swagger.py b/flask_restplus/swagger.py index d98cb5d0..d355f9ad 100644 --- a/flask_restplus/swagger.py +++ b/flask_restplus/swagger.py @@ -16,7 +16,7 @@ from werkzeug.routing import parse_rule from . import fields -from .model import Model, ModelBase +from .model import SchemaModel, Model, ModelBase from .reqparse import RequestParser from .utils import merge, not_none, not_none_sorted from ._http import HTTPStatus @@ -557,6 +557,11 @@ def register_model(self, model): if isinstance(specs, Model): for field in itervalues(specs): self.register_field(field) + if isinstance(specs, SchemaModel) and 'definitions' in specs._schema: + for key, defn in iteritems(specs._schema['definitions']): + if key not in self.api.models: + self.register_model(self.api.schema_model(key, defn)) + del(specs._schema['definitions']) return ref(model) def register_field(self, field):