refactor: enhance document and knowledge deletion logic to remove associated files

This commit is contained in:
wxg0103 2025-07-09 19:08:31 +08:00
parent 19b7ae24c9
commit 580adc5a88
2 changed files with 10 additions and 1 deletions

View File

@ -665,6 +665,9 @@ class DocumentSerializers(serializers.Serializer):
def delete(self):
document_id = self.data.get("document_id")
QuerySet(model=Document).filter(id=document_id).delete()
source_file_ids = [doc['meta'].get('source_file_id') for doc in
Document.objects.filter(id__=document_id).values("meta")]
QuerySet(File).filter(id__in=source_file_ids).delete()
# 删除段落
QuerySet(model=Paragraph).filter(document_id=document_id).delete()
# 删除问题
@ -1189,6 +1192,9 @@ class DocumentSerializers(serializers.Serializer):
BatchSerializer(data=instance).is_valid(model=Document, raise_exception=True)
self.is_valid(raise_exception=True)
document_id_list = instance.get("id_list")
source_file_ids = [doc['meta'].get('source_file_id') for doc in
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()
delete_problems_and_mappings(document_id_list)

View File

@ -29,7 +29,7 @@ from common.utils.fork import Fork, ChildLink
from common.utils.logger import maxkb_logger
from common.utils.split_model import get_split_model
from knowledge.models import Knowledge, KnowledgeScope, KnowledgeType, Document, Paragraph, Problem, \
ProblemParagraphMapping, TaskType, State, SearchMode, KnowledgeFolder
ProblemParagraphMapping, TaskType, State, SearchMode, KnowledgeFolder, File
from knowledge.serializers.common import ProblemParagraphManage, get_embedding_model_id_by_knowledge_id, MetaSerializer, \
GenerateRelatedSerializer, get_embedding_model_by_knowledge_id, list_paragraph, write_image, zip_dir
from knowledge.serializers.document import DocumentSerializers
@ -417,6 +417,9 @@ class KnowledgeSerializer(serializers.Serializer):
QuerySet(WorkspaceUserResourcePermission).filter(target=knowledge.id).delete()
QuerySet(ApplicationKnowledgeMapping).filter(knowledge_id=knowledge.id).delete()
knowledge.delete()
File.objects.filter(
source_id=knowledge.id,
).delete()
delete_embedding_by_knowledge(self.data.get('knowledge_id'))
return True