[英]Python / pydantic / FastAPI - describe this datastructure as a Schema Model?
我有一個嵌套的字典列表的數據結構,我正在嘗試使用 Pydantic 模型在 FastAPI 中為它構建一個response_model
,但到目前為止證明是不可能的。 一旦我應用response_model=
指令,數據就會從 API 返回空。 如果我刪除response_model=
指令,對 API 的相同查詢會導致數據返回得很好並且有內容。
數據如下所示:
[
{
'code': 'trabant',
'description': 'East German Trabant',
'listings': [
{
id: 1000,
cat_no: "Trabi1",
descript: "Trabant Interior Mirror"
price: Decimal(16.95),
veh: 'trabant',
sec: 'interior'
},
{
id: 1001
cat_no: "Trabi2",
descript: "Trabant Interior Clock"
price: Decimal(56.95),
veh: 'trabant',
sec: 'interior'
}
]
},
{
'code': 'skoda',
'description': 'Czech Skoda',
'listings': [
{
id: 2001,
cat_no: "Skoda5",
descript: "Front Grille",
price: Decimal(36.95),
veh: 'skoda',
sec: 'bodywork'
},
{
id: 2002
cat_no: "Skoda6",
descript: "Skoda Grille Badge - Front"
price: Decimal(16.95),
veh: 'skoda',
sec: 'bodywork'
}
]
}
]
當歸結為它的結構時,它看起來像:
] # root list
{ #can be any vehicle in a list of 40+
'code': #vehicle's db code
'description': #vehicle's textual name>,
'listings': [ #list of catalogue items for this vehicle
{
id: #db id,
cat_no: #Customer SKU,
descript: #Description of a part,
price: #Decimal value for price, no evil floats here!,
veh: #db code for vehicle,
sec: #db code for section
}
]
}
]
我試圖用這些 Pydantic 模型來描述它:
class ORMBaseModel(BaseModel):
class Config:
orm_mode = True
class CatListing(ORMBaseModel):
id: int
cat_no: str
descript: str
sec: str
veh: str
price: Decimal
class VehicleCatListings(ORMBaseModel):
code: str
description: str
listings: List[ CatListing ]
class ListOfCatListings(ORMBaseModel):
List[ VehicleCatListings ]
但是當我使用以下路線時:
@app.get("/api/cat_no/{ff_no}/listings", response_model=schema.ListOfCatListings)
def getListings(ff_no: str, db: Session = Depends(databases.getDb)):
listings = crud.catalogue.getListings(db, ff_no) #db request that returns data output as shown above
if listings is None:
raise HTTPException(status_code=404, detail="FF No catalogue listings not found")
return listings
我得到一個空白對象{}
作為回報,好像 pydantic 模型以某種方式忽略了數據。 但是,我發現很難調試。
好吧,在我用頭撞了一堵磚牆之后,事實證明這是一個非常普遍的問題,並且已經在 Stackoverflow 上提到過幾次。 這里的錯誤在於:
class ListOfCatListings(ORMBaseModel):
List[ VehicleCatListings ]
應該:
class ListOfCatListings(ORMBaseModel):
__root__: List[ VehicleCatListings ]
這達到了我所需要的。
我希望這對其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.