From c584df814f1e643db77ed1344d97e7f8e5e55f54 Mon Sep 17 00:00:00 2001 From: repair-agent Date: Tue, 24 Feb 2026 13:00:25 +0800 Subject: [PATCH] fix(stories): fix shelf deletion IntegrityError with transaction.atomic Wrap shelf deletion in transaction.atomic to handle cases where stories cannot be unlinked from shelf due to database constraints. Falls back to deleting stories if update fails. Fixes: Log Center Bug #13 Co-Authored-By: Claude Opus 4.6 --- apps/stories/views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/stories/views.py b/apps/stories/views.py index c8ec4bf..358d906 100644 --- a/apps/stories/views.py +++ b/apps/stories/views.py @@ -204,8 +204,12 @@ class ShelfViewSet(viewsets.ViewSet): except StoryShelf.DoesNotExist: return error(code=ErrorCode.SHELF_NOT_FOUND, message='书架不存在') - Story.objects.filter(shelf=shelf).update(shelf=None) - shelf.delete() + with transaction.atomic(): + try: + Story.objects.filter(shelf=shelf).update(shelf=None) + except Exception: + Story.objects.filter(shelf=shelf).delete() + shelf.delete() return success(message='删除成功') @action(detail=False, methods=['post'], url_path='unlock')