【问题标题】:Flask-restplus: how to define a nested model with 'allOf' operation?Flask-restplus:如何使用“allOf”操作定义嵌套模型?
【发布时间】:2018-03-10 02:00:04
【问题描述】:

创建一个 python flask rest plus 服务器应用程序, 我正在尝试使用 '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 编辑器中也不支持它,所以我尝试将 'allOf' 与非必填字段。

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

非常感谢

【问题讨论】:

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


    【解决方案1】:

    您需要使用api.inherit。如documentation示例第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"
              }
            }
          }
        ]
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 2022-01-14
      • 2020-02-03
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多