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
在这种情况下,您的选择不多。
- 显式创建对象
@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)
- 改变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
- 更改
OuterObject
的定义
class OuterObject(List[InnerObject]):
pass
我目前正在处理 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
在这种情况下,您的选择不多。
- 显式创建对象
@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)
- 改变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
- 更改
OuterObject
的定义
class OuterObject(List[InnerObject]):
pass