From fb9da87abb8462c811391bf5bba530394f9b9f25 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 14 Oct 2021 10:02:05 -0400 Subject: [PATCH] Add devices to WirelessLinkForm --- netbox/dcim/models/device_components.py | 4 ++++ netbox/wireless/forms/models.py | 20 ++++++++++++++++---- netbox/wireless/tables.py | 14 ++++++++++++-- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 74724baf8..39c618f4d 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -656,6 +656,10 @@ class Interface(ComponentModel, BaseInterface, LinkTermination, PathEndpoint): "device, or it must be global".format(self.untagged_vlan) }) + @property + def _occupied(self): + return super()._occupied or bool(self.wireless_link_id) + @property def is_wired(self): return not self.is_virtual and not self.is_wireless diff --git a/netbox/wireless/forms/models.py b/netbox/wireless/forms/models.py index ca20b6ea8..a3454c79a 100644 --- a/netbox/wireless/forms/models.py +++ b/netbox/wireless/forms/models.py @@ -1,4 +1,4 @@ -from dcim.models import Interface +from dcim.models import Device, Interface from extras.forms import CustomFieldModelForm from extras.models import Tag from ipam.models import VLAN @@ -54,18 +54,30 @@ class WirelessLANForm(BootstrapMixin, CustomFieldModelForm): class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm): + device_a = DynamicModelChoiceField( + queryset=Device.objects.all(), + label='Device A' + ) interface_a = DynamicModelChoiceField( queryset=Interface.objects.all(), query_params={ - 'kind': 'wireless' + 'kind': 'wireless', + 'device_id': '$device_a', }, + disabled_indicator='_occupied', label='Interface A' ) + device_b = DynamicModelChoiceField( + queryset=Device.objects.all(), + label='Device B' + ) interface_b = DynamicModelChoiceField( queryset=Interface.objects.all(), query_params={ - 'kind': 'wireless' + 'kind': 'wireless', + 'device_id': '$device_b', }, + disabled_indicator='_occupied', label='Interface B' ) tags = DynamicModelMultipleChoiceField( @@ -76,7 +88,7 @@ class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm): class Meta: model = WirelessLink fields = [ - 'interface_a', 'interface_b', 'status', 'ssid', 'description', 'tags', + 'device_a', 'interface_a', 'device_b', 'interface_b', 'status', 'ssid', 'description', 'tags', ] widgets = { 'status': StaticSelect, diff --git a/netbox/wireless/tables.py b/netbox/wireless/tables.py index 671e948d2..486fa2a71 100644 --- a/netbox/wireless/tables.py +++ b/netbox/wireless/tables.py @@ -74,9 +74,17 @@ class WirelessLinkTable(BaseTable): verbose_name='ID' ) status = ChoiceFieldColumn() + device_a = tables.Column( + accessor=tables.A('interface_a__device'), + linkify=True + ) interface_a = tables.Column( linkify=True ) + device_b = tables.Column( + accessor=tables.A('interface_b__device'), + linkify=True + ) interface_b = tables.Column( linkify=True ) @@ -86,5 +94,7 @@ class WirelessLinkTable(BaseTable): class Meta(BaseTable.Meta): model = WirelessLink - fields = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description') - default_columns = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description') + fields = ('pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'description') + default_columns = ( + 'pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'description', + )