FastAPI: где установить exclude_unset=True?

#patch #fastapi

Вопрос:

Я изучаю fastAPI и не знаю, как частично обновить информацию о пользователе. Данное решение состоит в том, чтобы установить exclude_unset=True, но я не знаю, где это написать. Вот мои фрагменты кода:

routers/user.py:

 @router.patch('/{id}', status_code=status.HTTP_202_ACCEPTED)
def update_user(id, request: sUser, db: Session = Depends(get_db)):
    user = db.query(mUser).filter(mUser.id == id)

    if not user.first():
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f'The User with the id {id} is not found')

    user.update(request.dict(exclude={'createdAt'}, exclude_unset=True))

    db.commit()

    return user.first()
 

PS exclude = {‘createdAt’} работает, но exclude_unset=True не работает..

Вот моя схема пользователя:

schemas.py

 class User(BaseModel):
    username: str
    dob: datetime.date
    password: str
    createdAt: datetime.datetime
 

Ответ №1:

это потому, что вы используете его в экземпляре User модели.

Если вы хотите получать частичные обновления, очень полезно использовать параметр exclude_unset в модели .dict() Pydantic .

так что используйте его на объекте Pydantic.

более подробная информация в документации: https://pydantic-docs.helpmanual.io/usage/exporting_models/#modeldict