【问题标题】:How to do partial update in fastapi?如何在 fastapi 中进行部分更新?
【发布时间】: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 是否允许我这样做。

【问题讨论】:

    标签: python fastapi pydantic


    【解决方案1】:

    您可以使用exclude_none 来排除等于None 的值。

    示例

    item.dict(exclude_none=True)
    

    来源:Pydantic docs

    【讨论】:

    • 但是如果用户为该字段传递非字符串值,他们应该收到 400。但是 exclude_none 可能很有用,tnx
    • 事实上,在这种情况下他们应该收到 400。否则,您可以使用 name: str = None 并在 None 时排除它,如果不是 string 则提高 400
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2014-03-10
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多