创建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
非常感谢
答案 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"
}
}
}
]
}
}