Просмотр исходного кода

Fixes #3018: Components connected via a cable must have an equal number of positions

Jeremy Stretch 6 лет назад
Родитель
Сommit
a32d185ff0
2 измененных файлов с 11 добавлено и 0 удалено
  1. 1 0
      CHANGELOG.md
  2. 10 0
      netbox/dcim/models.py

+ 1 - 0
CHANGELOG.md

@@ -10,6 +10,7 @@ v2.6.2 (FUTURE)
 
 
 ## Bug Fixes
 ## Bug Fixes
 
 
+* [#3018](https://github.com/netbox-community/netbox/issues/3018) - Components connected via a cable must have an equal number of positions
 * [#3289](https://github.com/netbox-community/netbox/issues/3289) - Prevent position from being nullified when moving a device to a new rack
 * [#3289](https://github.com/netbox-community/netbox/issues/3289) - Prevent position from being nullified when moving a device to a new rack
 * [#3293](https://github.com/netbox-community/netbox/issues/3293) - Enable filtering device components by multiple device IDs
 * [#3293](https://github.com/netbox-community/netbox/issues/3293) - Enable filtering device components by multiple device IDs
 * [#3315](https://github.com/netbox-community/netbox/issues/3315) - Enable filtering devices/interfaces by multiple MAC addresses
 * [#3315](https://github.com/netbox-community/netbox/issues/3315) - Enable filtering devices/interfaces by multiple MAC addresses

+ 10 - 0
netbox/dcim/models.py

@@ -2772,6 +2772,16 @@ class Cable(ChangeLoggedModel):
                 self.termination_a_type, self.termination_b_type
                 self.termination_a_type, self.termination_b_type
             ))
             ))
 
 
+        # A component with multiple positions must be connected to a component with an equal number of positions
+        term_a_positions = getattr(self.termination_a, 'positions', 1)
+        term_b_positions = getattr(self.termination_b, 'positions', 1)
+        if term_a_positions != term_b_positions:
+            raise ValidationError(
+                "{} has {} positions and {} has {}. Both terminations must have the same number of positions.".format(
+                    self.termination_a, term_a_positions, self.termination_b, term_b_positions
+                )
+            )
+
         # A termination point cannot be connected to itself
         # A termination point cannot be connected to itself
         if self.termination_a == self.termination_b:
         if self.termination_a == self.termination_b:
             raise ValidationError("Cannot connect {} to itself".format(self.termination_a_type))
             raise ValidationError("Cannot connect {} to itself".format(self.termination_a_type))