Explorar o código

Allow re-assigning inventoryitems to other devices

kkthxbye-code %!s(int64=3) %!d(string=hai) anos
pai
achega
41f631b65b
Modificáronse 2 ficheiros con 24 adicións e 0 borrados
  1. 7 0
      netbox/dcim/forms/models.py
  2. 17 0
      netbox/dcim/models/device_components.py

+ 7 - 0
netbox/dcim/forms/models.py

@@ -1610,6 +1610,13 @@ class InventoryItemForm(DeviceComponentForm):
         ('Hardware', ('manufacturer', 'part_id', 'serial', 'asset_tag')),
     )
 
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Specifically allow editing the device of IntentoryItems
+        if self.instance.pk:
+            self.fields['device'].disabled = False
+
     class Meta:
         model = InventoryItem
         fields = [

+ 17 - 0
netbox/dcim/models/device_components.py

@@ -1153,3 +1153,20 @@ class InventoryItem(MPTTModel, ComponentModel):
             raise ValidationError({
                 "parent": "Cannot assign self as parent."
             })
+
+        # Validation for moving InventoryItems
+        if self.pk:
+            # Cannot move an InventoryItem to another device if it has a parent
+            if self.parent and self.parent.device != self.device:
+                raise ValidationError({
+                    "parent": "Parent inventory item does not belong to the same device."
+                })
+
+            # Prevent moving InventoryItems with children
+            first_child = self.get_children().first()
+            if first_child and first_child.device != self.device:
+                raise ValidationError("Cannot move an InventoryItem with dependent children")
+
+            # When moving an InventoryItem to another device, remove any associated component
+            if self.component and self.component.device != self.device:
+                self.component = None