From 38a0ed5e246ce78562f0fd192787917723863a45 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Fri, 21 Apr 2023 09:36:11 -0700 Subject: [PATCH] 12255 inventory item device change (#12311) * #12255 allow inventory items to change devices * #12255 allow inventory item template to change devices * #12255 fix init * 12255 remove can_swtich from template model * 12255 change to check module list --- .../dcim/models/device_component_templates.py | 25 +++++++++++-------- netbox/dcim/models/device_components.py | 3 ++- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/netbox/dcim/models/device_component_templates.py b/netbox/dcim/models/device_component_templates.py index 6ff58b0f0..c78300598 100644 --- a/netbox/dcim/models/device_component_templates.py +++ b/netbox/dcim/models/device_component_templates.py @@ -81,11 +81,25 @@ class ComponentTemplateModel(WebhooksMixin, ChangeLoggedModel): """ raise NotImplementedError() + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Cache the original DeviceType ID for reference under clean() + self._original_device_type = self.device_type_id + def to_objectchange(self, action): objectchange = super().to_objectchange(action) objectchange.related_object = self.device_type return objectchange + def clean(self): + super().clean() + + if self.pk is not None and self._original_device_type != self.device_type_id: + raise ValidationError({ + "device_type": "Component templates cannot be moved to a different device type." + }) + class ModularComponentTemplateModel(ComponentTemplateModel): """ @@ -120,12 +134,6 @@ class ModularComponentTemplateModel(ComponentTemplateModel): ), ) - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Cache the original DeviceType ID for reference under clean() - self._original_device_type = self.device_type_id - def to_objectchange(self, action): objectchange = super().to_objectchange(action) if self.device_type is not None: @@ -137,11 +145,6 @@ class ModularComponentTemplateModel(ComponentTemplateModel): def clean(self): super().clean() - if self.pk is not None and self._original_device_type != self.device_type_id: - raise ValidationError({ - "device_type": "Component templates cannot be moved to a different device type." - }) - # A component template must belong to a DeviceType *or* to a ModuleType if self.device_type and self.module_type: raise ValidationError( diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index c30ce3a97..551a66b87 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -97,7 +97,8 @@ class ComponentModel(NetBoxModel): def clean(self): super().clean() - if self.pk is not None and self._original_device != self.device_id: + # Check list of Modules that allow device field to be changed + if (type(self) not in [InventoryItem]) and (self.pk is not None) and (self._original_device != self.device_id): raise ValidationError({ "device": "Components cannot be moved to a different device." })