Include WirelessLAN attached interfaces

This commit is contained in:
jeremystretch 2021-10-14 09:48:12 -04:00
parent 4c475c1b33
commit bdf359470e
4 changed files with 50 additions and 6 deletions

View File

@ -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 %}

View File

@ -145,7 +145,7 @@ class WirelessLink(PrimaryModel):
objects = RestrictedQuerySet.as_manager()
clone_fields = ('ssid', 'group', 'status')
clone_fields = ('ssid', 'status')
class Meta:
ordering = ['pk']

View File

@ -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):

View File

@ -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()