From c359ac57372a8a549eca449caecdceba0b6081d1 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Tue, 20 Aug 2019 17:16:00 -0400 Subject: [PATCH] convert update() calls to save() calls --- netbox/circuits/signals.py | 6 +++++- netbox/dcim/models.py | 11 +++++++++-- netbox/dcim/signals.py | 12 ++++++++++-- netbox/dcim/tests/test_api.py | 8 ++++---- netbox/dcim/tests/test_views.py | 6 +++--- netbox/dcim/views.py | 16 ++++++++++------ 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/netbox/circuits/signals.py b/netbox/circuits/signals.py index cfe9d65e4..86db21400 100644 --- a/netbox/circuits/signals.py +++ b/netbox/circuits/signals.py @@ -10,4 +10,8 @@ def update_circuit(instance, **kwargs): """ When a CircuitTermination has been modified, update the last_updated time of its parent Circuit. """ - Circuit.objects.filter(pk=instance.circuit_id).invalidated_update(last_updated=timezone.now()) + circuits = Circuit.objects.filter(pk=instance.circuit_id) + time = timezone.now() + for circuit in circuits: + circuit.last_updated = time + circuit.save() diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index d4a54010c..b33a3ed30 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -607,7 +607,10 @@ class Rack(ChangeLoggedModel, CustomFieldModel): # Update racked devices if the assigned Site has been changed. if _site_id is not None and self.site_id != _site_id: - Device.objects.filter(rack=self).invalidated_update(site_id=self.site.pk) + devices = Device.objects.filter(rack=self) + for device in devices: + device.site = self.site + device.save() def to_csv(self): return ( @@ -1738,7 +1741,11 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): ) # Update Site and Rack assignment for any child Devices - Device.objects.filter(parent_bay__device=self).invalidated_update(site=self.site, rack=self.rack) + devices = Device.objects.filter(parent_bay__device=self) + for device in devices: + device.site = self.site + device.rack = self.rack + device.save() def to_csv(self): return ( diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index c603c9896..c1281c6a8 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -10,7 +10,11 @@ def assign_virtualchassis_master(instance, created, **kwargs): When a VirtualChassis is created, automatically assign its master device to the VC. """ if created: - Device.objects.filter(pk=instance.master.pk).invalidated_update(virtual_chassis=instance, vc_position=None) + devices = Device.objects.filter(pk=instance.master.pk) + for device in devices: + device.virtual_chassis = instance + device.vc_position = None + device.save() @receiver(pre_delete, sender=VirtualChassis) @@ -18,7 +22,11 @@ def clear_virtualchassis_members(instance, **kwargs): """ When a VirtualChassis is deleted, nullify the vc_position and vc_priority fields of its prior members. """ - Device.objects.filter(virtual_chassis=instance.pk).invalidated_update(vc_position=None, vc_priority=None) + devices = Device.objects.filter(virtual_chassis=instance.pk) + for device in devices: + device.vc_position = None + device.vc_priority = None + device.save() @receiver(post_save, sender=Cable) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 6b9cb47b1..9c873c886 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -3430,11 +3430,11 @@ class VirtualChassisTest(APITestCase): # Create two VirtualChassis with three members each self.vc1 = VirtualChassis.objects.create(master=self.device1, domain='test-domain-1') - Device.objects.filter(pk=self.device2.pk).invalidated_update(virtual_chassis=self.vc1, vc_position=2) - Device.objects.filter(pk=self.device3.pk).invalidated_update(virtual_chassis=self.vc1, vc_position=3) + Device.objects.filter(pk=self.device2.pk).update(virtual_chassis=self.vc1, vc_position=2) + Device.objects.filter(pk=self.device3.pk).update(virtual_chassis=self.vc1, vc_position=3) self.vc2 = VirtualChassis.objects.create(master=self.device4, domain='test-domain-2') - Device.objects.filter(pk=self.device5.pk).invalidated_update(virtual_chassis=self.vc2, vc_position=2) - Device.objects.filter(pk=self.device6.pk).invalidated_update(virtual_chassis=self.vc2, vc_position=3) + Device.objects.filter(pk=self.device5.pk).update(virtual_chassis=self.vc2, vc_position=2) + Device.objects.filter(pk=self.device6.pk).update(virtual_chassis=self.vc2, vc_position=3) def test_get_virtualchassis(self): diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index 0cba29a94..6e34b8ae9 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -442,11 +442,11 @@ class VirtualChassisTestCase(TestCase): # Create three VirtualChassis with two members each vc1 = VirtualChassis.objects.create(master=device1, domain='test-domain-1') - Device.objects.filter(pk=device2.pk).invalidated_update(virtual_chassis=vc1, vc_position=2) + Device.objects.filter(pk=device2.pk).update(virtual_chassis=vc1, vc_position=2) vc2 = VirtualChassis.objects.create(master=device3, domain='test-domain-2') - Device.objects.filter(pk=device4.pk).invalidated_update(virtual_chassis=vc2, vc_position=2) + Device.objects.filter(pk=device4.pk).update(virtual_chassis=vc2, vc_position=2) vc3 = VirtualChassis.objects.create(master=device5, domain='test-domain-3') - Device.objects.filter(pk=device6.pk).invalidated_update(virtual_chassis=vc3, vc_position=2) + Device.objects.filter(pk=device6.pk).update(virtual_chassis=vc3, vc_position=2) def test_virtualchassis_list(self): diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 802ba4231..fe98c93f3 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2108,7 +2108,10 @@ class VirtualChassisEditView(PermissionRequiredMixin, GetReturnURLMixin, View): # Nullify the vc_position of each member first to allow reordering without raising an IntegrityError on # duplicate positions. Then save each member instance. members = formset.save(commit=False) - Device.objects.filter(pk__in=[m.pk for m in members]).invalidated_update(vc_position=None) + devices = Device.objects.filter(pk__in=[m.pk for m in members]) + for device in devices: + device.vc_position = None + device.save() for member in members: member.save() @@ -2209,11 +2212,12 @@ class VirtualChassisRemoveMemberView(PermissionRequiredMixin, GetReturnURLMixin, if form.is_valid(): - Device.objects.filter(pk=device.pk).invalidated_update( - virtual_chassis=None, - vc_position=None, - vc_priority=None - ) + devices = Device.objects.filter(pk=device.pk) + for device in devices: + device.virtual_chassis = None + device.vc_position = None + device.vc_priority = None + device.save() msg = 'Removed {} from virtual chassis {}'.format(device, device.virtual_chassis) messages.success(request, msg)