@@ -395,13 +395,17 @@ class Query(serializers.Serializer):
395395 tag_ids = serializers .ListField (child = serializers .UUIDField (), allow_null = True , required = False ,
396396 allow_empty = True )
397397 no_tag = serializers .BooleanField (required = False , default = False , allow_null = True )
398+ tag_ids = serializers .ListField (child = serializers .UUIDField (),allow_null = True ,required = False ,allow_empty = True )
399+ no_tag = serializers .BooleanField (required = False ,default = False , allow_null = True )
400+ tag_exclude = serializers .BooleanField (required = False ,default = False , allow_null = True )
398401
399402 def get_query_set (self ):
400403 query_set = QuerySet (model = Document )
401404 query_set = query_set .filter (** {'knowledge_id' : self .data .get ("knowledge_id" )})
402405
403406 tag_ids = self .data .get ('tag_ids' )
404407 no_tag = self .data .get ('no_tag' )
408+ tag_exclude = self .data .get ('tag_exclude' )
405409 if 'name' in self .data and self .data .get ('name' ) is not None :
406410 query_set = query_set .filter (** {'name__icontains' : self .data .get ('name' )})
407411 if 'hit_handling_method' in self .data and self .data .get ('hit_handling_method' ) not in [None , '' ]:
@@ -419,7 +423,10 @@ def get_query_set(self):
419423 query_set = query_set .exclude (id__in = tagged_doc_ids )
420424 elif tag_ids :
421425 matched_doc_ids = QuerySet (DocumentTag ).filter (tag_id__in = tag_ids ).values_list ('document_id' , flat = True )
422- query_set = query_set .filter (id__in = matched_doc_ids )
426+ if tag_exclude :
427+ query_set = query_set .exclude (id__in = matched_doc_ids )
428+ else :
429+ query_set = query_set .filter (id__in = matched_doc_ids )
423430
424431 if 'status' in self .data and self .data .get ('status' ) is not None :
425432 task_type = self .data .get ('task_type' )
@@ -1605,6 +1612,40 @@ def delete_tags(self):
16051612 tag_id__in = tag_ids
16061613 ).delete ()
16071614
1615+ class DeleteDocsTag (serializers .Serializer ):
1616+ workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
1617+ knowledge_id = serializers .UUIDField (required = True , label = _ ('knowledge id' ))
1618+ tag_id = serializers .UUIDField (required = True , label = _ ('tag id' ))
1619+
1620+ def is_valid (self , * , raise_exception = False ):
1621+ super ().is_valid (raise_exception = True )
1622+ workspace_id = self .data .get ('workspace_id' )
1623+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
1624+ if workspace_id and workspace_id != 'None' :
1625+ query_set = query_set .filter (workspace_id = workspace_id )
1626+ if not query_set .exists ():
1627+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
1628+ if not QuerySet (Tag ).filter (
1629+ id = self .data .get ('tag_id' ),
1630+ knowledge_id = self .data .get ('knowledge_id' )
1631+ ).exists ():
1632+ raise AppApiException (500 , _ ('Tag id does not exist' ))
1633+
1634+ def batch_delete_docs_tag (self , instance ,with_valid = True ):
1635+ if with_valid :
1636+ BatchSerializer (data = instance ).is_valid (model = Document , raise_exception = True )
1637+ self .is_valid (raise_exception = True )
1638+ knowledge_id = self .data .get ('knowledge_id' )
1639+ tag_id = self .data .get ('tag_id' )
1640+ doc_id_list = instance .get ("id_list" )
1641+
1642+ valid_doc_count = Document .objects .filter (id__in = doc_id_list , knowledge_id = knowledge_id ).count ()
1643+ if valid_doc_count != len (doc_id_list ):
1644+ raise AppApiException (500 , _ ('Document id does not belong to current knowledge' ))
1645+
1646+ DocumentTag .objects .filter (document_id__in = doc_id_list ,tag_id = tag_id ).delete ()
1647+
1648+ return True
16081649 class ReplaceSourceFile (serializers .Serializer ):
16091650 workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
16101651 knowledge_id = serializers .UUIDField (required = True , label = _ ('knowledge id' ))
0 commit comments