我正在开发一个关于实际案例的项目(前面是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
?不过,这是不可能确定的。