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

This commit is contained in:
Jeremy Stretch 2018-08-17 14:26:50 -04:00
parent fd32a71131
commit 2804d89c5e

View File

@ -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 device_pks = form.cleaned_data['devices']
devices = form.cleaned_data['devices'] with transaction.atomic():
Device.objects.filter(pk__in=devices).update(cluster=cluster)
# 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 device_pks = form.cleaned_data['pk']
devices = form.cleaned_data['pk'] with transaction.atomic():
Device.objects.filter(pk__in=devices).update(cluster=None)
# 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())