From 73862bb3b78f7743ace507d0a13d97a000a57f8a Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Thu, 27 Aug 2026 10:07:07 +0330 Subject: [PATCH] feat(library): add atomic bulk assign-books action to AdminAuthorViewSet - Add assign-books action to AdminAuthorViewSet for bulk adding and removing book associations in a single SQL query --- apps/library/views_admin.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/library/views_admin.py b/apps/library/views_admin.py index e32e7b2..cc8ada4 100644 --- a/apps/library/views_admin.py +++ b/apps/library/views_admin.py @@ -135,6 +135,23 @@ class AdminAuthorViewSet(ModelViewSet): return queryset.order_by("full_name", "id") + @action(detail=True, methods=["post"], url_path="assign-books") + def assign_books(self, request, pk=None): + author = self.get_object() + add_ids = request.data.get("add_ids", []) or request.data.get("book_ids", []) + remove_ids = request.data.get("remove_ids", []) + + if add_ids: + Book.objects.filter(id__in=add_ids).update(author=author) + + if remove_ids: + Book.objects.filter(id__in=remove_ids, author=author).update(author=None) + + return Response({ + "status": "success", + "attached_count": author.books.count() + }) + class AdminBookViewSet(ModelViewSet): permission_classes = [IsAuthenticated, IsSuperAdmin]