mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-12-08 15:55:31 +01:00
add api support for adding and removing many tags simultaneously
This commit is contained in:
parent
3c2fac3d28
commit
929b25a969
3 changed files with 58 additions and 2 deletions
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue