From 0977eb0c38c3015763df8a50fd3b0b338f9eb7dd Mon Sep 17 00:00:00 2001 From: Aleksey Razorvin <> Date: Sat, 21 Mar 2026 13:56:55 +0500 Subject: [PATCH] fix: delete answers before questions in update_test to avoid FK violation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bulk DELETE bypasses ORM cascade — must manually delete child rows first. Co-Authored-By: Claude Sonnet 4.6 --- backend/app/api/tests.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/app/api/tests.py b/backend/app/api/tests.py index e27d825..a944d2b 100644 --- a/backend/app/api/tests.py +++ b/backend/app/api/tests.py @@ -170,6 +170,11 @@ async def update_test(test_id: int, data: TestCreate, db: AsyncSession = Depends test.time_limit = data.time_limit test.allow_navigation_back = data.allow_navigation_back + # Сначала удаляем ответы (FK: answers.question_id → questions.id) + q_ids_result = await db.execute(select(Question.id).where(Question.test_id == test_id)) + q_ids = [row[0] for row in q_ids_result.fetchall()] + if q_ids: + await db.execute(delete(Answer).where(Answer.question_id.in_(q_ids))) await db.execute(delete(Question).where(Question.test_id == test_id)) await db.flush()