diff --git a/netbox/netbox/api/viewsets/mixins.py b/netbox/netbox/api/viewsets/mixins.py index 4fedebad5..e74488164 100644 --- a/netbox/netbox/api/viewsets/mixins.py +++ b/netbox/netbox/api/viewsets/mixins.py @@ -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)