diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md index 91a615966..0d3df2a1a 100644 --- a/docs/release-notes/version-2.11.md +++ b/docs/release-notes/version-2.11.md @@ -17,7 +17,8 @@ * [#6640](https://github.com/netbox-community/netbox/issues/6640) - Disallow numeric values in custom text fields * [#6652](https://github.com/netbox-community/netbox/issues/6652) - Fix exception when adding components in bulk to multiple devices * [#6676](https://github.com/netbox-community/netbox/issues/6676) - Fix device/VM counts per cluster under cluster type/group views -* [#6680](https://github.com/netbox-community/netbox/issues/6680) - Allow setting custom field values for VM interfaces on intial creation +* [#6680](https://github.com/netbox-community/netbox/issues/6680) - Allow setting custom field values for VM interfaces on initial creation +* [#6695](https://github.com/netbox-community/netbox/issues/6695) - Fix exception when importing device type with invalid front port definition --- diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index dfe9fb066..5bcf135a1 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1878,8 +1878,7 @@ class FrontPortTemplateImportForm(ComponentTemplateImportForm): ) rear_port = forms.ModelChoiceField( queryset=RearPortTemplate.objects.all(), - to_field_name='name', - required=False + to_field_name='name' ) class Meta: diff --git a/netbox/dcim/models/device_component_templates.py b/netbox/dcim/models/device_component_templates.py index d99d6b7c3..9eb7785bf 100644 --- a/netbox/dcim/models/device_component_templates.py +++ b/netbox/dcim/models/device_component_templates.py @@ -290,19 +290,24 @@ class FrontPortTemplate(ComponentTemplateModel): def clean(self): super().clean() - # Validate rear port assignment - if self.rear_port.device_type != self.device_type: - raise ValidationError( - "Rear port ({}) must belong to the same device type".format(self.rear_port) - ) + try: - # Validate rear port position assignment - if self.rear_port_position > self.rear_port.positions: - raise ValidationError( - "Invalid rear port position ({}); rear port {} has only {} positions".format( - self.rear_port_position, self.rear_port.name, self.rear_port.positions + # Validate rear port assignment + if self.rear_port.device_type != self.device_type: + raise ValidationError( + "Rear port ({}) must belong to the same device type".format(self.rear_port) ) - ) + + # Validate rear port position assignment + if self.rear_port_position > self.rear_port.positions: + raise ValidationError( + "Invalid rear port position ({}); rear port {} has only {} positions".format( + self.rear_port_position, self.rear_port.name, self.rear_port.positions + ) + ) + + except RearPortTemplate.DoesNotExist: + pass def instantiate(self, device): if self.rear_port: