You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-Restplus如何建模字符串列表或对象列表类型的属性?

在Flask-Restplus中建模多类型列表属性

嘿,这个场景我之前在做Flask-Restplus项目时也遇到过,要建模一个既可以是字符串列表又可以是对象列表的属性,其实用fields.OneOf配合fields.List就能轻松搞定,具体操作步骤如下:

1. 定义嵌套对象的子模型

首先,先把那个带name和foo字段的对象模型定义出来,后续会用到它:

from flask_restplus import Api, fields

# 初始化Api实例
api = Api()

# 定义嵌套的对象模型
item_object_model = api.model('ItemObject', {
    'name': fields.String(required=True, description='The item name'),
    'foo': fields.String(required=True, description='Additional field for the object')
})

2. 定义单个元素的可选类型

接下来,我们需要一个能接受字符串或者上述对象的字段类型,这里用fields.OneOf来指定多种可选类型:

# 定义单个元素的允许类型:字符串或嵌套对象
item_type = fields.OneOf([
    fields.String(description='Plain string value'),
    fields.Nested(item_object_model, description='Object with name and foo fields')
], description='Can be either a plain string or an object')

3. 构建包含多类型列表的主模型

最后,在主模型中将my_attribute定义为这个可选类型的列表即可:

# 主模型,包含可以是字符串列表或对象列表的my_attribute
main_model = api.model('MainModel', {
    'my_attribute': fields.List(item_type, required=True, description='List containing strings or objects')
})

验证效果

现在这个模型就能完美兼容两种格式的输入/输出了:

字符串列表格式

{
  "my_attribute": ["value1", "value2"]
}

对象列表格式

{
  "my_attribute": [
    {"name": "value1", "foo": "something"},
    {"name": "value2", "foo": "something else"}
  ]
}

如果你的Flask-Restplus版本比较老旧(比如低于0.13.0),可能没有fields.OneOf,这种情况下可以自定义一个继承自fields.Raw的字段,在validate方法里手动校验类型,但fields.OneOf无疑是最简洁的方案。

内容的提问来源于stack exchange,提问作者adib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:00:01