Kaynağa Gözat

Fixes #2368: Record change in device changelog when altering cluster assignment

Jeremy Stretch 7 yıl önce
ebeveyn
işleme
2804d89c5e
1 değiştirilmiş dosya ile 18 ekleme ve 9 silme
  1. 18 9
      netbox/virtualization/views.py

+ 18 - 9
netbox/virtualization/views.py

@@ -2,6 +2,7 @@ from __future__ import unicode_literals
 
 
 from django.contrib import messages
 from django.contrib import messages
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.contrib.auth.mixins import PermissionRequiredMixin
+from django.db import transaction
 from django.db.models import Count
 from django.db.models import Count
 from django.shortcuts import get_object_or_404, redirect, render
 from django.shortcuts import get_object_or_404, redirect, render
 from django.urls import reverse
 from django.urls import reverse
@@ -183,17 +184,21 @@ class ClusterAddDevicesView(PermissionRequiredMixin, View):
 
 
         if form.is_valid():
         if form.is_valid():
 
 
-            # Assign the selected Devices to the Cluster
-            devices = form.cleaned_data['devices']
-            Device.objects.filter(pk__in=devices).update(cluster=cluster)
+            device_pks = form.cleaned_data['devices']
+            with transaction.atomic():
+
+                # Assign the selected Devices to the Cluster
+                for device in Device.objects.filter(pk__in=device_pks):
+                    device.cluster = cluster
+                    device.save()
 
 
             messages.success(request, "Added {} devices to cluster {}".format(
             messages.success(request, "Added {} devices to cluster {}".format(
-                len(devices), cluster
+                len(device_pks), cluster
             ))
             ))
             return redirect(cluster.get_absolute_url())
             return redirect(cluster.get_absolute_url())
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
-            'cluser': cluster,
+            'cluster': cluster,
             'form': form,
             'form': form,
             'return_url': cluster.get_absolute_url(),
             'return_url': cluster.get_absolute_url(),
         })
         })
@@ -212,12 +217,16 @@ class ClusterRemoveDevicesView(PermissionRequiredMixin, View):
             form = self.form(request.POST)
             form = self.form(request.POST)
             if form.is_valid():
             if form.is_valid():
 
 
-                # Remove the selected Devices from the Cluster
-                devices = form.cleaned_data['pk']
-                Device.objects.filter(pk__in=devices).update(cluster=None)
+                device_pks = form.cleaned_data['pk']
+                with transaction.atomic():
+
+                    # Remove the selected Devices from the Cluster
+                    for device in Device.objects.filter(pk__in=device_pks):
+                        device.cluster = None
+                        device.save()
 
 
                 messages.success(request, "Removed {} devices from cluster {}".format(
                 messages.success(request, "Removed {} devices from cluster {}".format(
-                    len(devices), cluster
+                    len(device_pks), cluster
                 ))
                 ))
                 return redirect(cluster.get_absolute_url())
                 return redirect(cluster.get_absolute_url())