add api support for adding and removing many tags simultaneously

This commit is contained in:
jonaswinkler
2020-12-23 15:13:55 +01:00
parent 930493af8f
commit 0427d1fbe9
3 changed files with 58 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
import itertools
from django.db.models import Q
from django_q.tasks import async_task
@@ -66,6 +68,27 @@ def remove_tag(doc_ids, tag):
return "OK"
def modify_tags(doc_ids, add_tags, remove_tags):
qs = Document.objects.filter(id__in=doc_ids)
affected_docs = [doc.id for doc in qs]
DocumentTagRelationship = Document.tags.through
DocumentTagRelationship.objects.filter(
document_id__in=affected_docs,
tag_id__in=remove_tags,
).delete()
DocumentTagRelationship.objects.bulk_create([
DocumentTagRelationship(
document_id=doc, tag_id=tag) for (doc,tag) in itertools.product(affected_docs, add_tags)
], ignore_conflicts=True)
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
return "OK"
def delete(doc_ids):
Document.objects.filter(id__in=doc_ids).delete()