Просмотр исходного кода

Include WirelessLAN attached interfaces

jeremystretch 4 лет назад
Родитель
Сommit
bdf359470e

+ 9 - 2
netbox/templates/wireless/wirelesslan.html

@@ -49,8 +49,15 @@
 	</div>
 </div>
 <div class="row">
-    <div class="col col-md-12">
-        {% plugin_full_width_page object %}
+  <div class="col col-md-12">
+    <div class="card">
+      <h5 class="card-header">Attached Interfaces</h5>
+      <div class="card-body">
+        {% include 'inc/table.html' with table=interfaces_table %}
+      </div>
     </div>
+    {% include 'inc/paginator.html' with paginator=interfaces_table.paginator page=interfaces_table.page %}
+    {% plugin_full_width_page object %}
+  </div>
 </div>
 {% endblock %}

+ 1 - 1
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']

+ 24 - 2
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):

+ 16 - 1
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()