From b36faff71407004383cde706d68aa771ad588603 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 3 Nov 2025 16:11:54 +0800 Subject: [PATCH] chore: update document deletion logic to handle paragraph IDs and related mappings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1063248 --user=刘瑞斌 【知识库】删除文档时,分段与问题的关联关系没有清除 https://www.tapd.cn/62980211/s/1793500 --- apps/knowledge/serializers/document.py | 12 ++++++++---- apps/knowledge/sql/list_problem.sql | 11 ++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/knowledge/serializers/document.py b/apps/knowledge/serializers/document.py index 292dbe81b..b077f99c6 100644 --- a/apps/knowledge/serializers/document.py +++ b/apps/knowledge/serializers/document.py @@ -683,10 +683,11 @@ class DocumentSerializers(serializers.Serializer): ] QuerySet(File).filter(id__in=source_file_ids).delete() QuerySet(File).filter(source_id=document_id, source_type=FileSourceType.DOCUMENT).delete() + paragraph_ids = QuerySet(model=Paragraph).filter(document_id=document_id).values_list("id", flat=True) + # 删除问题 + delete_problems_and_mappings(paragraph_ids) # 删除段落 QuerySet(model=Paragraph).filter(document_id=document_id).delete() - # 删除问题 - delete_problems_and_mappings([document_id]) # 删除向量库 delete_embedding_by_document(document_id) QuerySet(model=DocumentTag).filter(document_id=document_id).delete() @@ -1217,9 +1218,12 @@ class DocumentSerializers(serializers.Serializer): Document.objects.filter(id__in=document_id_list).values("meta")] QuerySet(File).filter(id__in=source_file_ids).delete() QuerySet(Document).filter(id__in=document_id_list).delete() - QuerySet(Paragraph).filter(document_id__in=document_id_list).delete() QuerySet(DocumentTag).filter(document_id__in=document_id_list).delete() - delete_problems_and_mappings(document_id_list) + paragraph_ids = QuerySet(Paragraph).filter(document_id__in=document_id_list).values_list("id", flat=True) + # 删除问题关系 + delete_problems_and_mappings(paragraph_ids) + # 删除段落 + QuerySet(Paragraph).filter(document_id__in=document_id_list).delete() # 删除向量库 delete_embedding_by_document_list(document_id_list) return True diff --git a/apps/knowledge/sql/list_problem.sql b/apps/knowledge/sql/list_problem.sql index affb51334..90f82dc6d 100644 --- a/apps/knowledge/sql/list_problem.sql +++ b/apps/knowledge/sql/list_problem.sql @@ -1,5 +1,6 @@ -SELECT - problem.*, - (SELECT "count"("id") FROM "problem_paragraph_mapping" WHERE problem_id="problem"."id") as "paragraph_count" - FROM - problem problem +SELECT problem.*, + (SELECT COUNT(ppm.id) + FROM problem_paragraph_mapping ppm + INNER JOIN paragraph p ON ppm.paragraph_id = p.id + WHERE ppm.problem_id = problem.id) AS "paragraph_count" +FROM problem problem