feat: add reset_meta function and update meta handling in Document model

v3.2
wxg0103 2025-08-27 15:25:30 +08:00
parent 7756d02b6a
commit b5cd3f9b31
2 changed files with 25 additions and 3 deletions

View File

@ -27,6 +27,12 @@ from models_provider.models import Model
from models_provider.tools import get_model, get_model_by_id from models_provider.tools import get_model, get_model_by_id
def reset_meta(meta):
if not meta.get('allow_download', False):
return {'allow_download': False}
return meta
def get_embedding_id(knowledge_id_list): def get_embedding_id(knowledge_id_list):
knowledge_list = QuerySet(Knowledge).filter(id__in=knowledge_id_list) knowledge_list = QuerySet(Knowledge).filter(id__in=knowledge_id_list)
if len(set([knowledge.embedding_model_id for knowledge in knowledge_list])) > 1: if len(set([knowledge.embedding_model_id for knowledge in knowledge_list])) > 1:
@ -84,7 +90,7 @@ class BaseSearchDatasetStep(ISearchDatasetStep):
.add_document_name(paragraph.get('document_name')) .add_document_name(paragraph.get('document_name'))
.add_hit_handling_method(paragraph.get('hit_handling_method')) .add_hit_handling_method(paragraph.get('hit_handling_method'))
.add_directly_return_similarity(paragraph.get('directly_return_similarity')) .add_directly_return_similarity(paragraph.get('directly_return_similarity'))
.add_meta(paragraph.get('meta')) .add_meta(reset_meta(paragraph.get('meta')))
.build()) .build())
@staticmethod @staticmethod

View File

@ -1,4 +1,5 @@
import io import io
import json
import os import os
import re import re
import traceback import traceback
@ -9,11 +10,13 @@ from typing import Dict, List
import openpyxl import openpyxl
import uuid_utils.compat as uuid import uuid_utils.compat as uuid
from celery_once import AlreadyQueued from celery_once import AlreadyQueued
from django.contrib.postgres.fields import JSONField
from django.core import validators from django.core import validators
from django.db import transaction, models from django.db import transaction, models
from django.db.models import QuerySet from django.db.models import QuerySet, Func, F, Value
from django.db.models.aggregates import Max from django.db.models.aggregates import Max
from django.db.models.functions import Substr, Reverse from django.db.models.fields.json import KeyTextTransform
from django.db.models.functions import Substr, Reverse, Coalesce, Cast
from django.http import HttpResponse from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _, gettext, get_language, to_locale from django.utils.translation import gettext_lazy as _, gettext, get_language, to_locale
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
@ -1256,6 +1259,19 @@ class DocumentSerializers(serializers.Serializer):
if directly_return_similarity is not None: if directly_return_similarity is not None:
update_dict['directly_return_similarity'] = directly_return_similarity update_dict['directly_return_similarity'] = directly_return_similarity
QuerySet(Document).filter(id__in=document_id_list).update(**update_dict) QuerySet(Document).filter(id__in=document_id_list).update(**update_dict)
allow_download = instance.get('allow_download')
if allow_download is not None:
# 我需要修改meta meta是存在Document的字段 是一个json字段 但是allow_download可能不存在
Document.objects.filter(id__in=document_id_list).update(
meta=Func(
F("meta"),
Value(["allow_download"]),
Value(json.dumps(allow_download)), # 转成 "true"/"false"
Value(True), # create_missing = true
function="jsonb_set",
output_field=JSONField(),
)
)
def batch_refresh(self, instance: Dict, with_valid=True): def batch_refresh(self, instance: Dict, with_valid=True):
if with_valid: if with_valid: