Search code examples
pythonflaskflask-restplus

Flask RestPlus inherit model doesn't work as expected


So I have this model in Flask RestPlus:

NS = Namespace('parent')
PARENT_MODEL = NS.model('parent', {
    'parent-id': fields.String(readOnly=True,
    'parent-name': fields.String(required=True)
})
CHILD_MODEL = NS.inherit('child', SUBSCRIPTION_MODEL, {
    'child-id': fields.String(required=True, readOnly=True),
    'child-name': fields.String(required=True),
    'child-some-property': fields.String(required=True)
})

CHILD_PROPERTY_MODEL = NS.inherit('child-other-property', RESOURCE_GROUP_MODEL, {
    'child-other-property': fields.Raw(required=False)
})

It doesn't work as expected, I get this output (and similar structure on the swagger docs).

[
  {
    "parent-id": "string",
    "parent-name": "string",
    "child-id": "string",
    "child-name": "string",
    "child-some-property": "string",
    "child-other-property": {}
  }
]

instead of something like this:

[
  {
    "parent-id": "string",
    "parent-name": "string", {
        "child-id": "string",
        "child-name": "string",
        "child-some-property": "string",{
            "child-other-property": {}
      }
    }
  }
]

I'm probably missing something simple, but can't understand what. This is what I'm consulting to figure out Models in Flask Restplus.


Solution

  • NS = Namespace('sample')
    
    child_model = NS.model('child', {
        'childid': fields.String(required=True, readOnly=True),
        'childname': fields.String(required=True),
        'data': fields.String(required=True),
        'complexdata': fields.Raw(required=False)
    })
    
    parent_model = NS.model('parent', {
        'id': fields.String(readOnly=True),
        'name': fields.String(required=True),
        'childdata': fields.List(
            fields.Nested(child_model, required=True)
            )
    })
    

    this is what works for me. It appears that Flask Restplus github is dead, no answer from maintainers. This might help someone.