Есть такая задача: Есть модель UserStructure, в ней есть поля которые нельзя обновлять. Как сделать ограничение на редактирование определенных полей? @router.put( path='/me', status_code=status.HTTP_200_OK, description='Обновляет информацию своего профиля' ) async def get_my_account( current_user: Annotated[UserStructure, Depends(get_current_user)], new_data: UserStructure = Body(..., description='Новые данные пользователя') ) -> JSONResponse: ... Python @router.put( path='/me', status_code=status.HTTP_200_OK, description='Обновляет информацию своего профиля' ) async def get_my_account( current_user: Annotated[UserStructure, Depends(get_current_user)], new_data: UserStructure = Body(..., description='Новые данные пользователя') ) -> JSONResponse: ... Модель: class UserStructure(BaseModel): id: int | None = Field(None, description='Уникальный идентификатор пользователя') login: str = Field(..., description='Логин пользователя') name: str = Field(..., description='Имя пользователя') surname: str = Field(..., description='Фамилия пользователя') email: str = Field(..., description='Электронная почта') phone_number: str = Field(..., description='Номер телефона') group_id: int = Field(..., description='ID группы (например: Администраторы, Курьеры, Бухгалтеры)') city_id: int = Field(..., description='ID города') prefix: str = Field(..., description='Префикс для идентификации') password_hash: str = Field(..., description='Хеш пароля, сами пароли не храним') status: str | None = Field(None, description='Статус пользователя') two_factor: bool = Field(False, description='Включена ли двухфакторная аутентификация') is_blocked: bool = Field(False, description='Заблокирован ли пользователь') requires_password_reset: bool = Field(False, description='Требуется ли смена пароля при следующем входе') created_at: datetime = Field(..., description='Дата создания пользователя') Python class UserStructure(BaseModel): id: int | None = Field(None, description='Уникальный идентификатор пользователя') login: str = Field(..., description='Логин пользователя') name: str = Field(..., description='Имя пользователя') surname: str = Field(..., description='Фамилия пользователя') email: str = Field(..., description='Электронная почта') phone_number: str = Field(..., description='Номер телефона') group_id: int = Field(..., description='ID группы (например: Администраторы, Курьеры, Бухгалтеры)') city_id: int = Field(..., description='ID города') prefix: str = Field(..., description='Префикс для идентификации') password_hash: str = Field(..., description='Хеш пароля, сами пароли не храним') status: str | None = Field(None, description='Статус пользователя') two_factor: bool = Field(False, description='Включена ли двухфакторная аутентификация') is_blocked: bool = Field(False, description='Заблокирован ли пользователь') requires_password_reset: bool = Field(False, description='Требуется ли смена пароля при следующем входе') created_at: datetime = Field(..., description='Дата создания пользователя') К примеру, нужно сделать так что бы created_at невозможно было редактировать.
Это прикол фаст апи, даже если в сваггере ты можешь изменять то в бд все будет окей главное поставить default The post was merged to previous Jan 4, 2025 Для этого примера делаешь two_factor: bool = Field(False, description='Включена ли двухфакторная аутентификация', default=False) - и все