Flask-restplus:如何使用' allOf'来定义嵌套模型操作?

时间:2017-09-28 10:46:19

标签: python-3.x flask swagger-editor flask-restplus

创建python flask rest和服务器应用程序, 我尝试使用' allOf '来创建输入体的模型(在POST操作中)。运营商, 这相当于以下示例,取自我用swagger编辑器创建的swagger.yaml:

definitions:
  XXXOperation:
    description: something...
    properties:
      oper_type:
      type: string
        enum:
          - oper_a
          - oper_b
          - oper_c
      operation:
        allOf:
          - $ref: '#/definitions/OperA'
          - $ref: '#/definitions/OperB'
          - $ref: '#/definitions/OperC'

应该是(只是在我疯狂的想象中):

xxx_oper_model = api.model('XXXOperation', {
    'oper_type': fields.String(required=True, enum['oper_a', 'oper_b', 'oper_c']),
    'operation': fields.Nested([OperA, OperB, OperC], type='anyof')
})

当OperA,OperB,OperC也被定义为模型时。 我怎么能这样做?

实际上,我更喜欢使用' oneOf ',但据我所知,即使在swagger编辑器中它也不受支持,所以我尝试使用& #39;的 allOf '没有必填字段。

版本: 烧瓶restplus:0.10.1,烧瓶:0.12.2,python:3.6.2

非常感谢

1 个答案:

答案 0 :(得分:0)

您需要使用api.inherit。如documentation示例的第30页中所述;

parent = api.model('Parent', {
  'name': fields.String,
  'class': fields.String(discriminator=True)
})

child = api.inherit('Child', parent, {
  'extra': fields.String
})

这样,子级将拥有“父级”的所有属性及其自己的附加属性extra

{
  "Child": {
    "allOf": [
      {
        "$ref": "#/definitions/Parent"
      },
      {
        "properties": {
          "extra": {
            "type": "string"
          }
        }
      }
    ]
  }
}