Enable changelog message support for bulk deletions

This commit is contained in:
Jeremy Stretch 2025-07-24 14:02:44 -04:00
parent 1615a369f9
commit bdb0e5720d

View File

@ -149,18 +149,25 @@ class BulkDestroyModelMixin:
serializer = BulkOperationSerializer(data=request.data, many=True)
serializer.is_valid(raise_exception=True)
qs = self.get_bulk_destroy_queryset().filter(
pk__in=[o['id'] for o in serializer.data]
pk__in=[o['id'] for o in serializer.validated_data]
)
self.perform_bulk_destroy(qs)
# Compile any changelog messages to be recorded on the objects being deleted
changelog_messages = {
o['id']: o.get('changelog_message') for o in serializer.validated_data
}
self.perform_bulk_destroy(qs, changelog_messages)
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_bulk_destroy(self, objects):
def perform_bulk_destroy(self, objects, changelog_messages=None):
changelog_messages = changelog_messages or {}
with transaction.atomic(using=router.db_for_write(self.queryset.model)):
for obj in objects:
if hasattr(obj, 'snapshot'):
obj.snapshot()
obj._changelog_message = changelog_messages.get(obj.pk)
self.perform_destroy(obj)