4

创建一个python烧瓶rest plus服务器应用程序,我正在尝试使用' allOf '运算符为输入主体(在POST操作中)创建一个模型,这相当于以下示例,取自我用创建的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 编辑器中也不支持它,所以我尝试使用带有非必填字段的“ allOf ”。

版本: flask restplus:0.10.1,flask:0.12.2,python:3.6.2

非常感谢

4

1 回答 1

-1

你需要使用api.inherit. 如文档示例的第 30 页所述;

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

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

这样,Child 将拥有 Parent 的所有属性 + 它自己的附加属性extra

{
  "Child": {
    "allOf": [
      {
        "$ref": "#/definitions/Parent"
      },
      {
        "properties": {
          "extra": {
            "type": "string"
          }
        }
      }
    ]
  }
}
于 2019-10-09T15:54:35.083 回答