diff --git a/netbox/circuits/forms/model_forms.py b/netbox/circuits/forms/model_forms.py index f514c9104..60a16d7f5 100644 --- a/netbox/circuits/forms/model_forms.py +++ b/netbox/circuits/forms/model_forms.py @@ -303,11 +303,15 @@ class VirtualCircuitTerminationForm(NetBoxModelForm): selector=True, query_params={ 'kind': 'virtual', + 'virtual_circuit_termination_id': 'null', + }, + context={ + 'parent': 'device', } ) fieldsets = ( - FieldSet('virtual_circuit', 'role', 'description', 'tags', 'interface'), + FieldSet('virtual_circuit', 'role', 'interface', 'description', 'tags'), ) class Meta: diff --git a/netbox/circuits/models/virtual_circuits.py b/netbox/circuits/models/virtual_circuits.py index ab43839d6..ced68c105 100644 --- a/netbox/circuits/models/virtual_circuits.py +++ b/netbox/circuits/models/virtual_circuits.py @@ -156,3 +156,9 @@ class VirtualCircuitTermination( return self.virtual_circuit.terminations.filter( role=VirtualCircuitTerminationRoleChoices.ROLE_HUB ) + + def clean(self): + super().clean() + + if self.interface and not self.interface.is_virtual: + raise ValidationError("Virtual circuits may be terminated only to virtual interfaces.") diff --git a/netbox/templates/circuits/virtualcircuittermination.html b/netbox/templates/circuits/virtualcircuittermination.html index 0219e25bf..c08e3c604 100644 --- a/netbox/templates/circuits/virtualcircuittermination.html +++ b/netbox/templates/circuits/virtualcircuittermination.html @@ -20,6 +20,7 @@
+

{% trans "Virtual Circuit Termination" %}

@@ -44,10 +45,31 @@
{% trans "Provider" %}
{% include 'inc/panels/tags.html' %} + {% include 'inc/panels/custom_fields.html' %} {% plugin_left_page object %}
- {% include 'inc/panels/custom_fields.html' %} +
+

{% trans "Interface" %}

+ + + + + + + + + + + + + + + + + +
{% trans "Device" %}{{ object.interface.device|linkify }}
{% trans "Interface" %}{{ object.interface|linkify }}
{% trans "Type" %}{{ object.interface.get_type_display }}
{% trans "Description" %}{{ object.interface.description|placeholder }}
+
{% plugin_right_page object %}