我有一个资源,并希望有一个post API端点来修改它。我的问题是,如果我设置所有属性是可选的[…]我怎么知道我是否想要删除一个属性还是将其设置为null?如果我在请求中设置它为null:我得到NoneType。但如果我不在请求中设置它,我也会得到NoneType。这两种情况之间是否存在不同的解决方案?
下面是一个示例程序:
from typing import Optional
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel
class TestEntity(BaseModel):
first: Optional[str]
second: Optional[str]
third: Optional[str]
app = FastAPI()
@app.post("/test")
def test(entity: TestEntity):
return entity
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=5000)
我想把第一个属性设置为null,其他属性不做任何操作,我做:
{
"first":null
}
通过POST请求。作为响应,我得到:
{
"first": null,
"second": null,
"third": null
}
正如你所看到的,你无法知道哪些属性被设置为null,哪些属性应该保持不变。
您可以在这里找到答案:Pydantic:检测字段值是否缺失或给定为null
@app.post("/test")
def test(entity: TestEntity):
return entity.dict(exclude_unset=True)