【发布时间】:2021-07-05 10:05:48
【问题描述】:
我想制作“部分更新”端点,但又不想在任何字段中传递null。
这是来自 fastapi https://fastapi.tiangolo.com/tutorial/body-updates/#partial-updates-with-patch 的指南:
class Item(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
price: Optional[float] = None
tax: float = 10.5
tags: List[str] = []
@app.patch("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
...
update_data = item.dict(exclude_unset=True)
...
使用这种方法,用户可以传递 {"name": null} 并损坏数据库,因为在我的情况下,name 应该始终是一个字符串。
那我该怎么办?到目前为止,我看到的唯一方法是使用一些哨兵对象(将它们用作“未设置”标记而不是 None),但这似乎很老套,我怀疑 pydantic 是否允许我这样做。
【问题讨论】: