在Flask-Restplus中,我需要建模一个属性值,该属性值可能 一个字符串列表或一个对象列表。
它可能看起来像这样:
{
'my_attribute': [
'value1',
'value2'
]
}
或者它可能如下所示:
{
'my_attribute': [
{
'name': 'value1',
'foo': 'something'
},
{
'name': 'value2',
'foo': 'something else'
}
]
}
我应该如何在Flask-Restplus'api.model
中对其进行建模?
答案 0 :(得分:1)
我自己就是这么想的。简而言之,创建一个发出自己的JSON模式的自定义字段类。反过来,模式使用oneOf
类型来指定它是字符串还是对象。
from flask_restplus import fields
element_object = api.model('Element_Object'{
'name': fields.String(),
'foo': fields.String()
})
class StringOrObjectElement(fields.Nested):
__schema_type__ = ['string','object']
def output(self, key, obj):
if isinstance(obj, str):
if key == 'name':
return obj
else:
return 'default_value'
return super().output(key, obj)
def schema(self):
schema_dict = super().schema()
schema_dict.pop('type')
nested_ref = schema_dict.pop('$ref')
schema_dict['oneOf'] = [
{
'type': 'string'
},
{
'$ref': nested_ref
}
]
return schema_dict
root_object = api.model('Root_Object', {
'my_attribute': fields.List(fields.StringOrObjectElement(element_object))