嵌套数据模型FastAPI的get方法存在问题



我正在开发一个关于实际案例的项目(前面是Angularjs,后面是FastAPI和MongoDB(,我遇到了以下问题:当我试图使用get方法来检索所有案例时,会出现以下错误:

pydantic.error_wrappers.ValidationError: 1 validation error for Case
response -> 0 -> id
str type expected (type=type_error.str)

我的数据模型如下:

from typing import Optional, List
from pydantic import BaseModel
class Answer(BaseModel):
id: str
description: str
required: bool
value: int

class SubOption(BaseModel):
id: str
description: str
answer: Answer

class Option(BaseModel):
id: str
description: str
suboption: Optional[List[SubOption]]
answer: Answer

class SubMenu(BaseModel):
id: str
description: str
option: List[Option]

class Menu(BaseModel):
id: str
description: str
submenu: List[SubMenu]
class Case(BaseModel):
id: str
description: str
menu: List[Menu]

方法:

def practicalCase(case) -> dict:
return{
"id": case["_id"],
"description": case["description"],
"menu": case["menu"]
}
def listCases(entity) -> list:
return [clinicalCase(case) for case in entity]

CRUD操作:

@case.get('/cases', response_model=list[Case], tags=["case"])
async def all_cases():
return listCases(ven.local.cases.find())
@case.post('/newcases', response_model=Case, tags=["case"])
async def new_case(case: Case):
case_new = dict(case)
del case_new["id"]
json_compatible_item_data = jsonable_encoder(case_new) 
id = ven.local.cases.insert_one(json_compatible_item_data).inserted_id
case = ven.local.cases.find_one({"_id": id})
ven.local.cases.find_one({"_id": id})

我尝试了很多不同的方法,从使用Field(…(调整数据模型到尝试将菜单dict添加到case dict,但都没有。

欢迎任何形式的帮助/提示。提前感谢

这没有任何意义:

def practicalCase(case) -> dict:
return{
"id": menu["id"],
"description": menu["description"],
"submenu": menu["submenu"]
}
def listCases(entity) -> list:
return [clinicalCase(case) for case in entity]

参数case从未在practicalCase中使用,但您使用变量名称menu?voorlistCases()也是如此,您期望一个名为entity的参数,但却引用了case

其次,这个:

class Case(BaseModel):
id: str
description: str
menu: List[Menu]

需要类型为str的id,而我打赌您正在使用int?不过,这是不可能确定的。

最新更新