我正在使用 FastAPI 和 Pydantic 制作 API。
我想要一些 PATCH 端点,其中可以一次编辑记录的 1 个或 N 个字段。 此外,我希望客户端只传递有效负载中的必要字段。
例子:
class Item(BaseModel):
name: str
description: str
price: float
tax: float
@app.post("/items", response_model=Item)
async def post_item(item: Item):
...
@app.patch("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
...
在此示例中,对于 POST 请求,我希望每个字段都是必填字段。但是,在 PATCH 端点中,我不介意负载是否只包含,例如,描述字段。这就是为什么我希望所有字段都是可选的。
天真的方法:
class UpdateItem(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
price: Optional[float] = None
tax: Optional[float]
但这在代码重复方面会很糟糕。
还有更好的选择吗?
原文由 nolwww 发布,翻译遵循 CC BY-SA 4.0 许可协议
元类解决方案
我刚刚想出了以下内容:
将其用作:
所以基本上它将所有非可选字段替换为
Optional
欢迎任何编辑!
以你的例子: