Метод изменения категорий
Так как в методе удаления категорий, мы не удаляли, а изменяли значение поля, код в методе изменений категорий будет очень похож. На данном этапе мы создадим нашу конечную точку, которая будет вносить изменения в существующие категории.
@router.put('/update_category')
async def update_category(db: Annotated[Session, Depends(get_db)], category_id: int, update_category: CreateCategory):
category = db.scalar(select(Category).where(Category.id == category_id))
if category is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='There is no category found'
)
db.execute(update(Category).where(Category.id == category_id).values(
name=update_category.name,
slug=slugify(update_category.name),
parent_id=update_category.parent_id))
db.commit()
return {
'status_code': status.HTTP_200_OK,
'transaction': 'Category update is successful'
}
Разберем данный код подробно. Первым делом мы должны получить параметр category_id из запроса, а также получим нашу Pydantic модель в виде переменной update_category.
Далее, по аналогии с удалением категорий, мы должны получить категорию с полученным category_id, и если ее не существует вызвать ошибку 404 с текстом 'There is no category found'. И уже после этой проверки, также через метод update в SQLAlchemy, изменяем значения полей, на значения из полученной Pydantic модели.
Запустим сервер и проверим работу. Так как в прошлом шаге мы удалили категорию, создадим еще одну.
И теперь попробуем изменить у нее значение:
Если мы откроем базу данных, то увидим что у нашей записи был успешно изменено значение parent_id, тем самым мы сделали категорию Macbook подкатегорией в категории Apple
Изменим значение is_active у категории Apple, чтобы она была снова активной.
И теперь если мы получим все категории, то увидим следующее:
На этом разработка конечных точек для категорий закончена. В следующем шаге попробуйте выполнить домашнее задание, по аналогии с этим разделом.
Далее, по аналогии с удалением категорий, мы должны получить категорию с полученным category_id, чтобы вызвать ошибку 404 с текстом 'There is no category found'.Не нужно добавить, что то типа "В случае если такого нет", или я не верно понял?
@Алексей_Бойко, Спасибо, исправил.