Flask-restplus:如何使用“allOf”操作定义嵌套模型?
Posted
技术标签:
【中文标题】Flask-restplus:如何使用“allOf”操作定义嵌套模型?【英文标题】:Flask-restplus: how to define a nested model with 'allOf' operation? 【发布时间】: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
非常感谢
【问题讨论】:
【参考方案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"
]
【讨论】:
以上是关于Flask-restplus:如何使用“allOf”操作定义嵌套模型?的主要内容,如果未能解决你的问题,请参考以下文章
使用flask-restplus在flask-SQLAlchemy中创建多对多关联表时出错