2
0
Эх сурвалжийг харах

Add devices to WirelessLinkForm

jeremystretch 4 жил өмнө
parent
commit
fb9da87abb

+ 4 - 0
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

+ 16 - 4
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,

+ 12 - 2
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',
+        )