From bdf359470ea749f46a98ffb7f163a1b04996e0f5 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 14 Oct 2021 09:48:12 -0400 Subject: [PATCH] Include WirelessLAN attached interfaces --- netbox/templates/wireless/wirelesslan.html | 11 +++++++-- netbox/wireless/models.py | 2 +- netbox/wireless/tables.py | 26 ++++++++++++++++++++-- netbox/wireless/views.py | 17 +++++++++++++- 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/netbox/templates/wireless/wirelesslan.html b/netbox/templates/wireless/wirelesslan.html index f2133cd54..cfe13ca45 100644 --- a/netbox/templates/wireless/wirelesslan.html +++ b/netbox/templates/wireless/wirelesslan.html @@ -49,8 +49,15 @@
-
- {% plugin_full_width_page object %} +
+
+
Attached Interfaces
+
+ {% include 'inc/table.html' with table=interfaces_table %} +
+ {% include 'inc/paginator.html' with paginator=interfaces_table.paginator page=interfaces_table.page %} + {% plugin_full_width_page object %} +
{% endblock %} diff --git a/netbox/wireless/models.py b/netbox/wireless/models.py index 12c4e55aa..b0cacde15 100644 --- a/netbox/wireless/models.py +++ b/netbox/wireless/models.py @@ -145,7 +145,7 @@ class WirelessLink(PrimaryModel): objects = RestrictedQuerySet.as_manager() - clone_fields = ('ssid', 'group', 'status') + clone_fields = ('ssid', 'status') class Meta: ordering = ['pk'] diff --git a/netbox/wireless/tables.py b/netbox/wireless/tables.py index 58d77b56f..671e948d2 100644 --- a/netbox/wireless/tables.py +++ b/netbox/wireless/tables.py @@ -1,5 +1,6 @@ import django_tables2 as tables +from dcim.models import Interface from utilities.tables import ( BaseTable, ButtonsColumn, ChoiceFieldColumn, LinkedCountColumn, MPTTColumn, TagColumn, ToggleColumn, ) @@ -35,14 +36,35 @@ class WirelessLANTable(BaseTable): ssid = tables.Column( linkify=True ) + group = tables.Column( + linkify=True + ) + interface_count = tables.Column( + verbose_name='Interfaces' + ) tags = TagColumn( url_name='wireless:wirelesslan_list' ) class Meta(BaseTable.Meta): model = WirelessLAN - fields = ('pk', 'ssid', 'description', 'vlan') - default_columns = ('pk', 'ssid', 'description', 'vlan') + fields = ('pk', 'ssid', 'group', 'description', 'vlan', 'interface_count', 'tags') + default_columns = ('pk', 'ssid', 'group', 'description', 'vlan', 'interface_count') + + +class WirelessLANInterfacesTable(BaseTable): + pk = ToggleColumn() + device = tables.Column( + linkify=True + ) + name = tables.Column( + linkify=True + ) + + class Meta(BaseTable.Meta): + model = Interface + fields = ('pk', 'device', 'name', 'rf_role', 'rf_channel') + default_columns = ('pk', 'device', 'name', 'rf_role', 'rf_channel') class WirelessLinkTable(BaseTable): diff --git a/netbox/wireless/views.py b/netbox/wireless/views.py index 6405d46df..a9238df33 100644 --- a/netbox/wireless/views.py +++ b/netbox/wireless/views.py @@ -1,5 +1,7 @@ +from dcim.models import Interface from netbox.views import generic from utilities.tables import paginate_table +from utilities.utils import count_related from . import filtersets, forms, tables from .models import * @@ -81,7 +83,9 @@ class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView): # class WirelessLANListView(generic.ObjectListView): - queryset = WirelessLAN.objects.all() + queryset = WirelessLAN.objects.annotate( + interface_count=count_related(Interface, 'wireless_lans') + ) filterset = filtersets.WirelessLANFilterSet filterset_form = forms.WirelessLANFilterForm table = tables.WirelessLANTable @@ -90,6 +94,17 @@ class WirelessLANListView(generic.ObjectListView): class WirelessLANView(generic.ObjectView): queryset = WirelessLAN.objects.all() + def get_extra_context(self, request, instance): + attached_interfaces = Interface.objects.restrict(request.user, 'view').filter( + wireless_lans=instance + ) + interfaces_table = tables.WirelessLANInterfacesTable(attached_interfaces) + paginate_table(interfaces_table, request) + + return { + 'interfaces_table': interfaces_table, + } + class WirelessLANEditView(generic.ObjectEditView): queryset = WirelessLAN.objects.all()