diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 67cd58ad1..ce7721f3d 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -1619,11 +1619,19 @@ class FrontPortForm(ModularDeviceComponentForm): def clean(self): super().clean() + # FrontPort with no positions cannot be mapped to more than one RearPort + if not self.cleaned_data['positions'] and len(self.cleaned_data['rear_ports']) > 1: + raise forms.ValidationError({ + 'positions': _("A front port with no positions cannot be mapped to multiple rear ports.") + }) + # Count of selected rear port & position pairs much match the assigned number of positions if len(self.cleaned_data['rear_ports']) != self.cleaned_data['positions']: - raise forms.ValidationError( - _("The number of rear port/position pairs selected must match the number of positions assigned.") - ) + raise forms.ValidationError({ + 'rear_ports': _( + "The number of rear port/position pairs selected must match the number of positions assigned." + ) + }) def _save_m2m(self): super()._save_m2m() diff --git a/netbox/dcim/migrations/0221_m2m_port_assignments.py b/netbox/dcim/migrations/0221_m2m_port_assignments.py index d6c3710d4..b925959d8 100644 --- a/netbox/dcim/migrations/0221_m2m_port_assignments.py +++ b/netbox/dcim/migrations/0221_m2m_port_assignments.py @@ -22,7 +22,7 @@ def populate_port_assignments(apps, schema_editor): for front_port in front_ports: yield PortAssignment( front_port_id=front_port.pk, - front_port_position=1, + front_port_position=None, rear_port_id=front_port.rear_port_id, rear_port_position=front_port.rear_port_position, ) @@ -45,9 +45,11 @@ class Migration(migrations.Migration): ( 'front_port_position', models.PositiveSmallIntegerField( + blank=True, + null=True, validators=[ django.core.validators.MinValueValidator(1), - django.core.validators.MaxValueValidator(1024), + django.core.validators.MaxValueValidator(1024) ] ), ), diff --git a/netbox/dcim/migrations/0222_frontport_positions.py b/netbox/dcim/migrations/0222_frontport_positions.py index 93421ee47..c98f9ab96 100644 --- a/netbox/dcim/migrations/0222_frontport_positions.py +++ b/netbox/dcim/migrations/0222_frontport_positions.py @@ -25,7 +25,8 @@ class Migration(migrations.Migration): model_name='frontport', name='positions', field=models.PositiveSmallIntegerField( - default=1, + blank=True, + null=True, validators=[ django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1024) diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 33d8d986b..517cfd7ca 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -786,7 +786,7 @@ class CablePath(models.Model): port_assignments = PortAssignment.objects.filter(front_port__in=remote_terminations) if not port_assignments: - print('No front-to-rear port assignments found') + print(f'No front-to-rear port assignments found for {remote_terminations}') break position_stack.append([assignment.rear_port_position for assignment in port_assignments]) terminations = [assignment.rear_port for assignment in port_assignments] @@ -804,7 +804,7 @@ class CablePath(models.Model): port_assignments = PortAssignment.objects.filter(rear_port__in=remote_terminations) if not port_assignments: - print('No rear-to-front port assignments found') + print(f'No rear-to-front port assignments found for {remote_terminations}') break position_stack.append([assignment.front_port_position for assignment in port_assignments]) terminations = [assignment.front_port for assignment in port_assignments] diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 3c054891b..3b5753c77 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1079,10 +1079,12 @@ class PortAssignment(models.Model): on_delete=models.CASCADE, ) front_port_position = models.PositiveSmallIntegerField( + blank=True, + null=True, validators=( MinValueValidator(PORT_POSITION_MIN), MaxValueValidator(PORT_POSITION_MAX), - ) + ), ) rear_port = models.ForeignKey( to='dcim.RearPort', @@ -1092,7 +1094,7 @@ class PortAssignment(models.Model): validators=( MinValueValidator(PORT_POSITION_MIN), MaxValueValidator(PORT_POSITION_MAX), - ) + ), ) class Meta: @@ -1146,7 +1148,8 @@ class FrontPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): ) positions = models.PositiveSmallIntegerField( verbose_name=_('positions'), - default=1, + blank=True, + null=True, validators=[ MinValueValidator(PORT_POSITION_MIN), MaxValueValidator(PORT_POSITION_MAX) diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index a36688e07..e9322980b 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -285,7 +285,7 @@ class LegacyCablePathTests(CablePathTestCase): frontport1 = FrontPort.objects.create(device=self.device, name='Front Port 1') PortAssignment.objects.create( front_port=frontport1, - front_port_position=1, + front_port_position=None, rear_port=rearport1, rear_port_position=1 ) @@ -348,7 +348,7 @@ class LegacyCablePathTests(CablePathTestCase): frontport1 = FrontPort.objects.create(device=self.device, name='Front Port 1') PortAssignment.objects.create( front_port=frontport1, - front_port_position=1, + front_port_position=None, rear_port=rearport1, rear_port_position=1 ) @@ -417,16 +417,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport2_2 = FrontPort.objects.create(device=self.device, name='Front Port 2:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2_1, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2_1, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport2_2, front_port_position=1, rear_port=rearport2, rear_port_position=2, + front_port=frontport2_2, front_port_position=None, rear_port=rearport2, rear_port_position=2, ), ]) @@ -541,16 +541,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport2_2 = FrontPort.objects.create(device=self.device, name='Front Port 2:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2_1, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2_1, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport2_2, front_port_position=1, rear_port=rearport2, rear_port_position=2, + front_port=frontport2_2, front_port_position=None, rear_port=rearport2, rear_port_position=2, ), ]) @@ -711,22 +711,22 @@ class LegacyCablePathTests(CablePathTestCase): frontport4_2 = FrontPort.objects.create(device=self.device, name='Front Port 4:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4_1, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4_1, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), PortAssignment( - front_port=frontport4_2, front_port_position=1, rear_port=rearport4, rear_port_position=2, + front_port=frontport4_2, front_port_position=None, rear_port=rearport4, rear_port_position=2, ), ]) @@ -839,28 +839,28 @@ class LegacyCablePathTests(CablePathTestCase): frontport4_2 = FrontPort.objects.create(device=self.device, name='Front Port 4:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2_1, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2_1, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport2_2, front_port_position=1, rear_port=rearport2, rear_port_position=2, + front_port=frontport2_2, front_port_position=None, rear_port=rearport2, rear_port_position=2, ), PortAssignment( - front_port=frontport3_1, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3_1, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport3_2, front_port_position=1, rear_port=rearport3, rear_port_position=2, + front_port=frontport3_2, front_port_position=None, rear_port=rearport3, rear_port_position=2, ), PortAssignment( - front_port=frontport4_1, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4_1, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), PortAssignment( - front_port=frontport4_2, front_port_position=1, rear_port=rearport4, rear_port_position=2, + front_port=frontport4_2, front_port_position=None, rear_port=rearport4, rear_port_position=2, ), ]) @@ -966,28 +966,28 @@ class LegacyCablePathTests(CablePathTestCase): interface3 = Interface.objects.create(device=self.device, name='Interface 3') interface4 = Interface.objects.create(device=self.device, name='Interface 4') rearport1 = RearPort.objects.create(device=self.device, name='Rear Port 1', positions=4) - rearport2 = RearPort.objects.create(device=self.device, name='Rear Port 5') - rearport3 = RearPort.objects.create(device=self.device, name='Rear Port 2', positions=4) + rearport2 = RearPort.objects.create(device=self.device, name='Rear Port 2') + rearport3 = RearPort.objects.create(device=self.device, name='Rear Port 3', positions=4) frontport1_1 = FrontPort.objects.create(device=self.device, name='Front Port 1:1') frontport1_2 = FrontPort.objects.create(device=self.device, name='Front Port 1:2') - frontport2 = FrontPort.objects.create(device=self.device, name='Front Port 5') - frontport3_1 = FrontPort.objects.create(device=self.device, name='Front Port 2:1') - frontport3_2 = FrontPort.objects.create(device=self.device, name='Front Port 2:2') + frontport2 = FrontPort.objects.create(device=self.device, name='Front Port 2') + frontport3_1 = FrontPort.objects.create(device=self.device, name='Front Port 3:1') + frontport3_2 = FrontPort.objects.create(device=self.device, name='Front Port 3:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3_1, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3_1, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport3_2, front_port_position=1, rear_port=rearport3, rear_port_position=2, + front_port=frontport3_2, front_port_position=None, rear_port=rearport3, rear_port_position=2, ), ]) @@ -1025,6 +1025,8 @@ class LegacyCablePathTests(CablePathTestCase): b_terminations=[rearport3] ) cable4.save() + for path in CablePath.objects.all(): + print(path.path_objects) self.assertPathExists( ( interface1, cable1, frontport1_1, rearport1, cable3, frontport2, rearport2, @@ -1082,10 +1084,10 @@ class LegacyCablePathTests(CablePathTestCase): frontport1_2 = FrontPort.objects.create(device=self.device, name='Front Port 1:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), ]) @@ -1151,7 +1153,7 @@ class LegacyCablePathTests(CablePathTestCase): rearport2 = RearPort.objects.create(device=self.device, name='Rear Port 2') frontport1 = FrontPort.objects.create(device=self.device, name='Front Port 1') PortAssignment.objects.create( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ) # Create cables @@ -1469,16 +1471,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport2_2 = FrontPort.objects.create(device=self.device, name='Front Port 2:2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport2_1, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2_1, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport2_2, front_port_position=1, rear_port=rearport2, rear_port_position=2, + front_port=frontport2_2, front_port_position=None, rear_port=rearport2, rear_port_position=2, ), ]) circuittermination1 = CircuitTermination.objects.create( @@ -1667,16 +1669,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport4 = FrontPort.objects.create(device=self.device, name='Front Port 4') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), ]) @@ -1760,28 +1762,28 @@ class LegacyCablePathTests(CablePathTestCase): frontport2_4 = FrontPort.objects.create(device=self.device, name='Front Port 2:4') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1_1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1_1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport1_2, front_port_position=1, rear_port=rearport1, rear_port_position=2, + front_port=frontport1_2, front_port_position=None, rear_port=rearport1, rear_port_position=2, ), PortAssignment( - front_port=frontport1_3, front_port_position=1, rear_port=rearport1, rear_port_position=3, + front_port=frontport1_3, front_port_position=None, rear_port=rearport1, rear_port_position=3, ), PortAssignment( - front_port=frontport1_4, front_port_position=1, rear_port=rearport1, rear_port_position=4, + front_port=frontport1_4, front_port_position=None, rear_port=rearport1, rear_port_position=4, ), PortAssignment( - front_port=frontport2_1, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2_1, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport2_2, front_port_position=1, rear_port=rearport2, rear_port_position=2, + front_port=frontport2_2, front_port_position=None, rear_port=rearport2, rear_port_position=2, ), PortAssignment( - front_port=frontport2_3, front_port_position=1, rear_port=rearport2, rear_port_position=3, + front_port=frontport2_3, front_port_position=None, rear_port=rearport2, rear_port_position=3, ), PortAssignment( - front_port=frontport2_4, front_port_position=1, rear_port=rearport2, rear_port_position=4, + front_port=frontport2_4, front_port_position=None, rear_port=rearport2, rear_port_position=4, ), ]) @@ -1940,16 +1942,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport4 = FrontPort.objects.create(device=self.device, name='Front Port 4') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), ]) @@ -2025,16 +2027,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport4 = FrontPort.objects.create(device=self.device, name='Front Port 4') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), ]) @@ -2131,22 +2133,22 @@ class LegacyCablePathTests(CablePathTestCase): frontport6 = FrontPort.objects.create(device=self.device, name='Front Port 6') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), PortAssignment( - front_port=frontport5, front_port_position=1, rear_port=rearport5, rear_port_position=1, + front_port=frontport5, front_port_position=None, rear_port=rearport5, rear_port_position=1, ), PortAssignment( - front_port=frontport6, front_port_position=1, rear_port=rearport6, rear_port_position=1, + front_port=frontport6, front_port_position=None, rear_port=rearport6, rear_port_position=1, ), ]) @@ -2253,10 +2255,10 @@ class LegacyCablePathTests(CablePathTestCase): frontport2 = FrontPort.objects.create(device=self.device, name='Front Port 2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), ]) @@ -2302,10 +2304,10 @@ class LegacyCablePathTests(CablePathTestCase): frontport2 = FrontPort.objects.create(device=self.device, name='Front Port 2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), ]) @@ -2352,10 +2354,10 @@ class LegacyCablePathTests(CablePathTestCase): frontport2 = FrontPort.objects.create(device=self.device, name='Front Port 2') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), ]) @@ -2407,7 +2409,7 @@ class LegacyCablePathTests(CablePathTestCase): frontport1 = FrontPort.objects.create(device=self.device, name='Front Port 1') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), ]) @@ -2521,16 +2523,16 @@ class LegacyCablePathTests(CablePathTestCase): frontport4 = FrontPort.objects.create(device=self.device, name='Front Port 4') PortAssignment.objects.bulk_create([ PortAssignment( - front_port=frontport1, front_port_position=1, rear_port=rearport1, rear_port_position=1, + front_port=frontport1, front_port_position=None, rear_port=rearport1, rear_port_position=1, ), PortAssignment( - front_port=frontport2, front_port_position=1, rear_port=rearport2, rear_port_position=1, + front_port=frontport2, front_port_position=None, rear_port=rearport2, rear_port_position=1, ), PortAssignment( - front_port=frontport3, front_port_position=1, rear_port=rearport3, rear_port_position=1, + front_port=frontport3, front_port_position=None, rear_port=rearport3, rear_port_position=1, ), PortAssignment( - front_port=frontport4, front_port_position=1, rear_port=rearport4, rear_port_position=1, + front_port=frontport4, front_port_position=None, rear_port=rearport4, rear_port_position=1, ), ])