Procházet zdrojové kódy

14033 raise validation error if A and B term go to same object (#14050)

* 14033 raise validation error if A and B term go to same object

* 14033 move check to cable model clean

* 14033 fix tests
Arthur Hanson před 2 roky
rodič
revize
b3fb393490
1 změnil soubory, kde provedl 11 přidání a 0 odebrání
  1. 11 0
      netbox/dcim/models/cables.py

+ 11 - 0
netbox/dcim/models/cables.py

@@ -180,6 +180,17 @@ class Cable(PrimaryModel):
                 if b_type not in COMPATIBLE_TERMINATION_TYPES.get(a_type):
                     raise ValidationError(f"Incompatible termination types: {a_type} and {b_type}")
 
+                if a_type == b_type:
+                    # can't directly use self.a_terminations here as possible they
+                    # don't have pk yet
+                    a_pks = set(obj.pk for obj in self.a_terminations if obj.pk)
+                    b_pks = set(obj.pk for obj in self.b_terminations if obj.pk)
+
+                    if (a_pks & b_pks):
+                        raise ValidationError(
+                            _("A and B terminations cannot connect to the same object.")
+                        )
+
             # Run clean() on any new CableTerminations
             for termination in self.a_terminations:
                 CableTermination(cable=self, cable_end='A', termination=termination).clean()