FastAPI:Return 响应对象数组

FastAPI: Return response with an array of objects

我目前正在处理 API 的 return 爬取数据。数据存储为一个数组,但是当我将 return 该数组作为端点上的响应时,我收到以下错误:

pydantic.error_wrappers.ValidationError: 1 validation error for InnerObject
response
  value is not a valid dict (type=type_error.dict)

这是我要实现的目标的简化版本:

class InnerObject(BaseModel):
    foo: str

class OuterObject(BaseModel):
    bar: List[InnerObject]

@app.get("/test_single", response_model=InnerObject)
def test():
    return InnerObject(foo="Hello Mars")

@app.get("/test_multiple", response_model=OuterObject)
def test():
    objects = [InnerObject]

    objects.append(InnerObject(foo="Hello Earth"))
    objects.append(InnerObject(foo="Hello Mars"))

    return objects

我有一组对象,我想 return 作为响应。也有可能我不需要 outer/inner 模型,但我也尝试过将 response_model 设置为 response_model=List[InnerObject]。返回 "/test_single" 端点中看到的单个 InnerObject 工作正常,所以我认为这与尝试 return a [InnerObject]

有关

提前感谢您的任何回复

解决方案

感谢 kosciej16,问题是我在声明列表时添加了对象名称。所以我本来应该去 objects = []

却去 objects = [InnerObject]

通常 fastapi 会尝试从您 return.

中创建 OuterObject

在这种情况下,您的选择不多。

  1. 显式创建对象
@app.get("/test_multiple", response_model=OuterObject)
def test():
    objects = []

    objects.append(InnerObject(foo="Hello Earth"))
    objects.append(InnerObject(foo="Hello Mars"))

    return OuterObject(bar=objects)
  1. 改变response_model
@app.get("/test_multiple", response_model=List[InnerObject])
def test():
    objects = []

    objects.append(InnerObject(foo="Hello Earth"))
    objects.append(InnerObject(foo="Hello Mars"))

    return objects
  1. 更改 OuterObject
  2. 的定义
class OuterObject(List[InnerObject]):
    pass