From 6a87ccd908a86654a07091610c041a8e8e3bf8ff Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 9 Jul 2025 10:47:39 +0800 Subject: [PATCH] feat: add convert_uuid_to_str function for UUID serialization in document metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1058357 --user=刘瑞斌 【知识库】通用知识库-上传QA问答对csv和excel文档失败 https://www.tapd.cn/62980211/s/1726470 --- apps/knowledge/serializers/document.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/knowledge/serializers/document.py b/apps/knowledge/serializers/document.py index 1243d4e9f..5218eedac 100644 --- a/apps/knowledge/serializers/document.py +++ b/apps/knowledge/serializers/document.py @@ -74,6 +74,17 @@ parse_qa_handle_list = [XlsParseQAHandle(), CsvParseQAHandle(), XlsxParseQAHandl parse_table_handle_list = [CsvParseTableHandle(), XlsParseTableHandle(), XlsxParseTableHandle()] +def convert_uuid_to_str(obj): + if isinstance(obj, dict): + return {k: convert_uuid_to_str(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [convert_uuid_to_str(i) for i in obj] + elif isinstance(obj, uuid.UUID): + return str(obj) + else: + return obj + + class BatchCancelInstanceSerializer(serializers.Serializer): id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True), label=_('id list')) type = serializers.IntegerField(required=True, label=_('task type')) @@ -844,6 +855,9 @@ class DocumentSerializers(serializers.Serializer): @staticmethod def get_document_paragraph_model(knowledge_id, instance: Dict): source_meta = {'source_file_id': instance.get('source_file_id')} if instance.get('source_file_id') else {} + meta = {**instance.get('meta'), **source_meta} if instance.get('meta') is not None else source_meta + meta = convert_uuid_to_str(meta) + document_model = Document( **{ 'knowledge_id': knowledge_id, @@ -853,8 +867,7 @@ class DocumentSerializers(serializers.Serializer): lambda x, y: x + y, [len(p.get('content')) for p in instance.get('paragraphs', [])], 0), - 'meta': {**instance.get('meta'), **source_meta} if instance.get( - 'meta') is not None else source_meta, + 'meta': meta, 'type': instance.get('type') if instance.get('type') is not None else KnowledgeType.BASE })