mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Removed SearchTables; created DetailTables for models where needed
This commit is contained in:
@ -3,7 +3,7 @@ from __future__ import unicode_literals
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from django_tables2.utils import Accessor
|
from django_tables2.utils import Accessor
|
||||||
|
|
||||||
from utilities.tables import BaseTable, SearchTable, ToggleColumn
|
from utilities.tables import BaseTable, ToggleColumn
|
||||||
from .models import Circuit, CircuitType, Provider
|
from .models import Circuit, CircuitType, Provider
|
||||||
|
|
||||||
|
|
||||||
@ -21,19 +21,18 @@ CIRCUITTYPE_ACTIONS = """
|
|||||||
class ProviderTable(BaseTable):
|
class ProviderTable(BaseTable):
|
||||||
pk = ToggleColumn()
|
pk = ToggleColumn()
|
||||||
name = tables.LinkColumn()
|
name = tables.LinkColumn()
|
||||||
circuit_count = tables.Column(accessor=Accessor('count_circuits'), verbose_name='Circuits')
|
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Provider
|
model = Provider
|
||||||
fields = ('pk', 'name', 'asn', 'account', 'circuit_count')
|
fields = ('pk', 'name', 'asn', 'account',)
|
||||||
|
|
||||||
|
|
||||||
class ProviderSearchTable(SearchTable):
|
class ProviderDetailTable(ProviderTable):
|
||||||
name = tables.LinkColumn()
|
circuit_count = tables.Column(accessor=Accessor('count_circuits'), verbose_name='Circuits')
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
class Meta(ProviderTable.Meta):
|
||||||
model = Provider
|
model = Provider
|
||||||
fields = ('name', 'asn', 'account')
|
fields = ('pk', 'name', 'asn', 'account', 'circuit_count')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -74,19 +73,3 @@ class CircuitTable(BaseTable):
|
|||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Circuit
|
model = Circuit
|
||||||
fields = ('pk', 'cid', 'type', 'provider', 'tenant', 'a_side', 'z_side', 'description')
|
fields = ('pk', 'cid', 'type', 'provider', 'tenant', 'a_side', 'z_side', 'description')
|
||||||
|
|
||||||
|
|
||||||
class CircuitSearchTable(SearchTable):
|
|
||||||
cid = tables.LinkColumn(verbose_name='ID')
|
|
||||||
provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')])
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
a_side = tables.LinkColumn(
|
|
||||||
'dcim:site', accessor=Accessor('termination_a.site'), args=[Accessor('termination_a.site.slug')]
|
|
||||||
)
|
|
||||||
z_side = tables.LinkColumn(
|
|
||||||
'dcim:site', accessor=Accessor('termination_z.site'), args=[Accessor('termination_z.site.slug')]
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Circuit
|
|
||||||
fields = ('cid', 'type', 'provider', 'tenant', 'a_side', 'z_side', 'description')
|
|
||||||
|
@ -26,7 +26,7 @@ class ProviderListView(ObjectListView):
|
|||||||
queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
|
queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
|
||||||
filter = filters.ProviderFilter
|
filter = filters.ProviderFilter
|
||||||
filter_form = forms.ProviderFilterForm
|
filter_form = forms.ProviderFilterForm
|
||||||
table = tables.ProviderTable
|
table = tables.ProviderDetailTable
|
||||||
template_name = 'circuits/provider_list.html'
|
template_name = 'circuits/provider_list.html'
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from __future__ import unicode_literals
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from django_tables2.utils import Accessor
|
from django_tables2.utils import Accessor
|
||||||
|
|
||||||
from utilities.tables import BaseTable, SearchTable, ToggleColumn
|
from utilities.tables import BaseTable, ToggleColumn
|
||||||
from .models import (
|
from .models import (
|
||||||
ConsolePort, ConsolePortTemplate, ConsoleServerPortTemplate, Device, DeviceBayTemplate, DeviceRole, DeviceType,
|
ConsolePort, ConsolePortTemplate, ConsoleServerPortTemplate, Device, DeviceBayTemplate, DeviceRole, DeviceType,
|
||||||
Interface, InterfaceTemplate, Manufacturer, Platform, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
|
Interface, InterfaceTemplate, Manufacturer, Platform, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
|
||||||
@ -142,30 +142,26 @@ class SiteTable(BaseTable):
|
|||||||
name = tables.LinkColumn()
|
name = tables.LinkColumn()
|
||||||
region = tables.TemplateColumn(template_code=SITE_REGION_LINK)
|
region = tables.TemplateColumn(template_code=SITE_REGION_LINK)
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
||||||
|
|
||||||
|
class Meta(BaseTable.Meta):
|
||||||
|
model = Site
|
||||||
|
fields = ('pk', 'name', 'facility', 'region', 'tenant', 'asn')
|
||||||
|
|
||||||
|
|
||||||
|
class SiteDetailTable(SiteTable):
|
||||||
rack_count = tables.Column(accessor=Accessor('count_racks'), orderable=False, verbose_name='Racks')
|
rack_count = tables.Column(accessor=Accessor('count_racks'), orderable=False, verbose_name='Racks')
|
||||||
device_count = tables.Column(accessor=Accessor('count_devices'), orderable=False, verbose_name='Devices')
|
device_count = tables.Column(accessor=Accessor('count_devices'), orderable=False, verbose_name='Devices')
|
||||||
prefix_count = tables.Column(accessor=Accessor('count_prefixes'), orderable=False, verbose_name='Prefixes')
|
prefix_count = tables.Column(accessor=Accessor('count_prefixes'), orderable=False, verbose_name='Prefixes')
|
||||||
vlan_count = tables.Column(accessor=Accessor('count_vlans'), orderable=False, verbose_name='VLANs')
|
vlan_count = tables.Column(accessor=Accessor('count_vlans'), orderable=False, verbose_name='VLANs')
|
||||||
circuit_count = tables.Column(accessor=Accessor('count_circuits'), orderable=False, verbose_name='Circuits')
|
circuit_count = tables.Column(accessor=Accessor('count_circuits'), orderable=False, verbose_name='Circuits')
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(SiteTable.Meta):
|
||||||
model = Site
|
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'name', 'facility', 'region', 'tenant', 'asn', 'rack_count', 'device_count', 'prefix_count',
|
'pk', 'name', 'facility', 'region', 'tenant', 'asn', 'rack_count', 'device_count', 'prefix_count',
|
||||||
'vlan_count', 'circuit_count',
|
'vlan_count', 'circuit_count',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class SiteSearchTable(SearchTable):
|
|
||||||
name = tables.LinkColumn()
|
|
||||||
region = tables.TemplateColumn(template_code=SITE_REGION_LINK)
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Site
|
|
||||||
fields = ('name', 'facility', 'region', 'tenant', 'asn')
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rack groups
|
# Rack groups
|
||||||
#
|
#
|
||||||
@ -214,29 +210,22 @@ class RackTable(BaseTable):
|
|||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
||||||
role = tables.TemplateColumn(RACK_ROLE)
|
role = tables.TemplateColumn(RACK_ROLE)
|
||||||
u_height = tables.TemplateColumn("{{ record.u_height }}U", verbose_name='Height')
|
u_height = tables.TemplateColumn("{{ record.u_height }}U", verbose_name='Height')
|
||||||
devices = tables.Column(accessor=Accessor('device_count'))
|
|
||||||
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Rack
|
model = Rack
|
||||||
|
fields = ('pk', 'name', 'site', 'group', 'facility_id', 'tenant', 'role', 'u_height')
|
||||||
|
|
||||||
|
|
||||||
|
class RackDetailTable(RackTable):
|
||||||
|
devices = tables.Column(accessor=Accessor('device_count'))
|
||||||
|
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
||||||
|
|
||||||
|
class Meta(RackTable.Meta):
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'name', 'site', 'group', 'facility_id', 'tenant', 'role', 'u_height', 'devices', 'get_utilization'
|
'pk', 'name', 'site', 'group', 'facility_id', 'tenant', 'role', 'u_height', 'devices', 'get_utilization'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class RackSearchTable(SearchTable):
|
|
||||||
name = tables.LinkColumn()
|
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
|
||||||
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group')
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
role = tables.TemplateColumn(RACK_ROLE)
|
|
||||||
u_height = tables.TemplateColumn("{{ record.u_height }}U", verbose_name='Height')
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Rack
|
|
||||||
fields = ('name', 'site', 'group', 'facility_id', 'tenant', 'role', 'u_height')
|
|
||||||
|
|
||||||
|
|
||||||
class RackImportTable(BaseTable):
|
class RackImportTable(BaseTable):
|
||||||
name = tables.LinkColumn('dcim:rack', args=[Accessor('pk')], verbose_name='Name')
|
name = tables.LinkColumn('dcim:rack', args=[Accessor('pk')], verbose_name='Name')
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
|
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
|
||||||
@ -296,29 +285,22 @@ class DeviceTypeTable(BaseTable):
|
|||||||
is_pdu = tables.BooleanColumn(verbose_name='PDU')
|
is_pdu = tables.BooleanColumn(verbose_name='PDU')
|
||||||
is_network_device = tables.BooleanColumn(verbose_name='Net')
|
is_network_device = tables.BooleanColumn(verbose_name='Net')
|
||||||
subdevice_role = tables.TemplateColumn(SUBDEVICE_ROLE_TEMPLATE, verbose_name='Subdevice Role')
|
subdevice_role = tables.TemplateColumn(SUBDEVICE_ROLE_TEMPLATE, verbose_name='Subdevice Role')
|
||||||
instance_count = tables.Column(verbose_name='Instances')
|
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = DeviceType
|
model = DeviceType
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'model', 'manufacturer', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
|
'pk', 'model', 'manufacturer', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
|
||||||
'is_network_device', 'subdevice_role', 'instance_count'
|
'is_network_device', 'subdevice_role',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DeviceTypeSearchTable(SearchTable):
|
class DeviceTypeDetailTable(DeviceTypeTable):
|
||||||
model = tables.LinkColumn('dcim:devicetype', args=[Accessor('pk')], verbose_name='Device Type')
|
instance_count = tables.Column(verbose_name='Instances')
|
||||||
is_full_depth = tables.BooleanColumn(verbose_name='Full Depth')
|
|
||||||
is_console_server = tables.BooleanColumn(verbose_name='CS')
|
|
||||||
is_pdu = tables.BooleanColumn(verbose_name='PDU')
|
|
||||||
is_network_device = tables.BooleanColumn(verbose_name='Net')
|
|
||||||
subdevice_role = tables.TemplateColumn(SUBDEVICE_ROLE_TEMPLATE, verbose_name='Subdevice Role')
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
class Meta(DeviceTypeTable.Meta):
|
||||||
model = DeviceType
|
|
||||||
fields = (
|
fields = (
|
||||||
'model', 'manufacturer', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
|
'pk', 'model', 'manufacturer', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
|
||||||
'is_network_device', 'subdevice_role',
|
'is_network_device', 'subdevice_role', 'instance_count',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -439,32 +421,22 @@ class DeviceTable(BaseTable):
|
|||||||
'dcim:devicetype', args=[Accessor('device_type.pk')], verbose_name='Type',
|
'dcim:devicetype', args=[Accessor('device_type.pk')], verbose_name='Type',
|
||||||
text=lambda record: record.device_type.full_name
|
text=lambda record: record.device_type.full_name
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class Meta(BaseTable.Meta):
|
||||||
|
model = Device
|
||||||
|
fields = ('pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type')
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceDetailTable(DeviceTable):
|
||||||
primary_ip = tables.TemplateColumn(
|
primary_ip = tables.TemplateColumn(
|
||||||
orderable=False, verbose_name='IP Address', template_code=DEVICE_PRIMARY_IP
|
orderable=False, verbose_name='IP Address', template_code=DEVICE_PRIMARY_IP
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(DeviceTable.Meta):
|
||||||
model = Device
|
model = Device
|
||||||
fields = ('pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
|
fields = ('pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
|
||||||
|
|
||||||
|
|
||||||
class DeviceSearchTable(SearchTable):
|
|
||||||
name = tables.TemplateColumn(template_code=DEVICE_LINK)
|
|
||||||
status = tables.TemplateColumn(template_code=DEVICE_STATUS, verbose_name='Status')
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
|
||||||
rack = tables.LinkColumn('dcim:rack', args=[Accessor('rack.pk')])
|
|
||||||
device_role = tables.TemplateColumn(DEVICE_ROLE, verbose_name='Role')
|
|
||||||
device_type = tables.LinkColumn(
|
|
||||||
'dcim:devicetype', args=[Accessor('device_type.pk')], verbose_name='Type',
|
|
||||||
text=lambda record: record.device_type.full_name
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Device
|
|
||||||
fields = ('name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type')
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceImportTable(BaseTable):
|
class DeviceImportTable(BaseTable):
|
||||||
name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name')
|
name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name')
|
||||||
status = tables.TemplateColumn(template_code=DEVICE_STATUS, verbose_name='Status')
|
status = tables.TemplateColumn(template_code=DEVICE_STATUS, verbose_name='Status')
|
||||||
|
@ -216,7 +216,7 @@ class SiteListView(ObjectListView):
|
|||||||
queryset = Site.objects.select_related('region', 'tenant')
|
queryset = Site.objects.select_related('region', 'tenant')
|
||||||
filter = filters.SiteFilter
|
filter = filters.SiteFilter
|
||||||
filter_form = forms.SiteFilterForm
|
filter_form = forms.SiteFilterForm
|
||||||
table = tables.SiteTable
|
table = tables.SiteDetailTable
|
||||||
template_name = 'dcim/site_list.html'
|
template_name = 'dcim/site_list.html'
|
||||||
|
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ class RackListView(ObjectListView):
|
|||||||
)
|
)
|
||||||
filter = filters.RackFilter
|
filter = filters.RackFilter
|
||||||
filter_form = forms.RackFilterForm
|
filter_form = forms.RackFilterForm
|
||||||
table = tables.RackTable
|
table = tables.RackDetailTable
|
||||||
template_name = 'dcim/rack_list.html'
|
template_name = 'dcim/rack_list.html'
|
||||||
|
|
||||||
|
|
||||||
@ -550,7 +550,7 @@ class DeviceTypeListView(ObjectListView):
|
|||||||
queryset = DeviceType.objects.select_related('manufacturer').annotate(instance_count=Count('instances'))
|
queryset = DeviceType.objects.select_related('manufacturer').annotate(instance_count=Count('instances'))
|
||||||
filter = filters.DeviceTypeFilter
|
filter = filters.DeviceTypeFilter
|
||||||
filter_form = forms.DeviceTypeFilterForm
|
filter_form = forms.DeviceTypeFilterForm
|
||||||
table = tables.DeviceTypeTable
|
table = tables.DeviceTypeDetailTable
|
||||||
template_name = 'dcim/devicetype_list.html'
|
template_name = 'dcim/devicetype_list.html'
|
||||||
|
|
||||||
|
|
||||||
@ -805,7 +805,7 @@ class DeviceListView(ObjectListView):
|
|||||||
'primary_ip4', 'primary_ip6')
|
'primary_ip4', 'primary_ip6')
|
||||||
filter = filters.DeviceFilter
|
filter = filters.DeviceFilter
|
||||||
filter_form = forms.DeviceFilterForm
|
filter_form = forms.DeviceFilterForm
|
||||||
table = tables.DeviceTable
|
table = tables.DeviceDetailTable
|
||||||
template_name = 'dcim/device_list.html'
|
template_name = 'dcim/device_list.html'
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from __future__ import unicode_literals
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from django_tables2.utils import Accessor
|
from django_tables2.utils import Accessor
|
||||||
|
|
||||||
from utilities.tables import BaseTable, SearchTable, ToggleColumn
|
from utilities.tables import BaseTable, ToggleColumn
|
||||||
from .models import Aggregate, IPAddress, Prefix, RIR, Role, VLAN, VLANGroup, VRF
|
from .models import Aggregate, IPAddress, Prefix, RIR, Role, VLAN, VLANGroup, VRF
|
||||||
|
|
||||||
|
|
||||||
@ -152,16 +152,6 @@ class VRFTable(BaseTable):
|
|||||||
fields = ('pk', 'name', 'rd', 'tenant', 'description')
|
fields = ('pk', 'name', 'rd', 'tenant', 'description')
|
||||||
|
|
||||||
|
|
||||||
class VRFSearchTable(SearchTable):
|
|
||||||
name = tables.LinkColumn()
|
|
||||||
rd = tables.Column(verbose_name='RD')
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = VRF
|
|
||||||
fields = ('name', 'rd', 'tenant', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RIRs
|
# RIRs
|
||||||
#
|
#
|
||||||
@ -197,24 +187,21 @@ class RIRTable(BaseTable):
|
|||||||
class AggregateTable(BaseTable):
|
class AggregateTable(BaseTable):
|
||||||
pk = ToggleColumn()
|
pk = ToggleColumn()
|
||||||
prefix = tables.LinkColumn(verbose_name='Aggregate')
|
prefix = tables.LinkColumn(verbose_name='Aggregate')
|
||||||
child_count = tables.Column(verbose_name='Prefixes')
|
|
||||||
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
|
||||||
date_added = tables.DateColumn(format="Y-m-d", verbose_name='Added')
|
date_added = tables.DateColumn(format="Y-m-d", verbose_name='Added')
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Aggregate
|
model = Aggregate
|
||||||
|
fields = ('pk', 'prefix', 'rir', 'date_added', 'description')
|
||||||
|
|
||||||
|
|
||||||
|
class AggregateDetailTable(AggregateTable):
|
||||||
|
child_count = tables.Column(verbose_name='Prefixes')
|
||||||
|
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
||||||
|
|
||||||
|
class Meta(AggregateTable.Meta):
|
||||||
fields = ('pk', 'prefix', 'rir', 'child_count', 'get_utilization', 'date_added', 'description')
|
fields = ('pk', 'prefix', 'rir', 'child_count', 'get_utilization', 'date_added', 'description')
|
||||||
|
|
||||||
|
|
||||||
class AggregateSearchTable(SearchTable):
|
|
||||||
prefix = tables.LinkColumn(verbose_name='Aggregate')
|
|
||||||
date_added = tables.DateColumn(format="Y-m-d", verbose_name='Added')
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Aggregate
|
|
||||||
fields = ('prefix', 'rir', 'date_added', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Roles
|
# Roles
|
||||||
#
|
#
|
||||||
@ -241,7 +228,6 @@ class PrefixTable(BaseTable):
|
|||||||
prefix = tables.TemplateColumn(PREFIX_LINK, attrs={'th': {'style': 'padding-left: 17px'}})
|
prefix = tables.TemplateColumn(PREFIX_LINK, attrs={'th': {'style': 'padding-left: 17px'}})
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
status = tables.TemplateColumn(STATUS_LABEL)
|
||||||
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
||||||
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
|
||||||
tenant = tables.TemplateColumn(TENANT_LINK)
|
tenant = tables.TemplateColumn(TENANT_LINK)
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
||||||
vlan = tables.LinkColumn('ipam:vlan', args=[Accessor('vlan.pk')], verbose_name='VLAN')
|
vlan = tables.LinkColumn('ipam:vlan', args=[Accessor('vlan.pk')], verbose_name='VLAN')
|
||||||
@ -249,37 +235,17 @@ class PrefixTable(BaseTable):
|
|||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Prefix
|
model = Prefix
|
||||||
fields = ('pk', 'prefix', 'status', 'vrf', 'get_utilization', 'tenant', 'site', 'vlan', 'role', 'description')
|
fields = ('pk', 'prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'description')
|
||||||
row_attrs = {
|
row_attrs = {
|
||||||
'class': lambda record: 'success' if not record.pk else '',
|
'class': lambda record: 'success' if not record.pk else '',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class PrefixBriefTable(BaseTable):
|
class PrefixDetailTable(PrefixTable):
|
||||||
prefix = tables.TemplateColumn(PREFIX_LINK_BRIEF)
|
get_utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization')
|
||||||
vrf = tables.LinkColumn('ipam:vrf', args=[Accessor('vrf.pk')], default='Global')
|
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
|
||||||
vlan = tables.LinkColumn('ipam:vlan', args=[Accessor('vlan.pk')])
|
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(PrefixTable.Meta):
|
||||||
model = Prefix
|
fields = ('pk', 'prefix', 'status', 'vrf', 'get_utilization', 'tenant', 'site', 'vlan', 'role', 'description')
|
||||||
fields = ('prefix', 'vrf', 'status', 'site', 'vlan', 'role')
|
|
||||||
orderable = False
|
|
||||||
|
|
||||||
|
|
||||||
class PrefixSearchTable(SearchTable):
|
|
||||||
prefix = tables.TemplateColumn(PREFIX_LINK, attrs={'th': {'style': 'padding-left: 17px'}})
|
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
|
||||||
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
|
||||||
tenant = tables.TemplateColumn(TENANT_LINK)
|
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
|
||||||
vlan = tables.LinkColumn('ipam:vlan', args=[Accessor('vlan.pk')], verbose_name='VLAN')
|
|
||||||
role = tables.TemplateColumn(PREFIX_ROLE_LINK)
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Prefix
|
|
||||||
fields = ('prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -292,43 +258,26 @@ class IPAddressTable(BaseTable):
|
|||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
status = tables.TemplateColumn(STATUS_LABEL)
|
||||||
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
||||||
tenant = tables.TemplateColumn(TENANT_LINK)
|
tenant = tables.TemplateColumn(TENANT_LINK)
|
||||||
nat_inside = tables.LinkColumn(
|
|
||||||
'ipam:ipaddress', args=[Accessor('nat_inside.pk')], orderable=False, verbose_name='NAT (Inside)'
|
|
||||||
)
|
|
||||||
device = tables.TemplateColumn(IPADDRESS_DEVICE, orderable=False)
|
device = tables.TemplateColumn(IPADDRESS_DEVICE, orderable=False)
|
||||||
|
interface = tables.Column(orderable=False)
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = IPAddress
|
model = IPAddress
|
||||||
fields = ('pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'device', 'description')
|
fields = ('pk', 'address', 'vrf', 'status', 'role', 'tenant', 'device', 'interface', 'description')
|
||||||
row_attrs = {
|
row_attrs = {
|
||||||
'class': lambda record: 'success' if not isinstance(record, IPAddress) else '',
|
'class': lambda record: 'success' if not isinstance(record, IPAddress) else '',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class IPAddressBriefTable(BaseTable):
|
class IPAddressDetailTable(IPAddressTable):
|
||||||
address = tables.LinkColumn('ipam:ipaddress', args=[Accessor('pk')], verbose_name='IP Address')
|
|
||||||
device = tables.LinkColumn('dcim:device', args=[Accessor('interface.device.pk')], orderable=False)
|
|
||||||
interface = tables.Column(orderable=False)
|
|
||||||
nat_inside = tables.LinkColumn(
|
nat_inside = tables.LinkColumn(
|
||||||
'ipam:ipaddress', args=[Accessor('nat_inside.pk')], orderable=False, verbose_name='NAT (Inside)'
|
'ipam:ipaddress', args=[Accessor('nat_inside.pk')], orderable=False, verbose_name='NAT (Inside)'
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(IPAddressTable.Meta):
|
||||||
model = IPAddress
|
fields = (
|
||||||
fields = ('address', 'device', 'interface', 'nat_inside')
|
'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'device', 'interface', 'description',
|
||||||
|
)
|
||||||
|
|
||||||
class IPAddressSearchTable(SearchTable):
|
|
||||||
address = tables.TemplateColumn(IPADDRESS_LINK, verbose_name='IP Address')
|
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
|
||||||
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF')
|
|
||||||
tenant = tables.TemplateColumn(TENANT_LINK)
|
|
||||||
device = tables.LinkColumn('dcim:device', args=[Accessor('interface.device.pk')], orderable=False)
|
|
||||||
interface = tables.Column(orderable=False)
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = IPAddress
|
|
||||||
fields = ('address', 'vrf', 'status', 'role', 'tenant', 'device', 'interface', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -358,24 +307,17 @@ class VLANTable(BaseTable):
|
|||||||
vid = tables.LinkColumn('ipam:vlan', args=[Accessor('pk')], verbose_name='ID')
|
vid = tables.LinkColumn('ipam:vlan', args=[Accessor('pk')], verbose_name='ID')
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
||||||
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group')
|
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group')
|
||||||
prefixes = tables.TemplateColumn(VLAN_PREFIXES, orderable=False, verbose_name='Prefixes')
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
status = tables.TemplateColumn(STATUS_LABEL)
|
||||||
role = tables.TemplateColumn(VLAN_ROLE_LINK)
|
role = tables.TemplateColumn(VLAN_ROLE_LINK)
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = VLAN
|
model = VLAN
|
||||||
|
fields = ('pk', 'vid', 'site', 'group', 'name', 'tenant', 'status', 'role', 'description')
|
||||||
|
|
||||||
|
|
||||||
|
class VLANDetailTable(VLANTable):
|
||||||
|
prefixes = tables.TemplateColumn(VLAN_PREFIXES, orderable=False, verbose_name='Prefixes')
|
||||||
|
|
||||||
|
class Meta(VLANTable.Meta):
|
||||||
fields = ('pk', 'vid', 'site', 'group', 'name', 'prefixes', 'tenant', 'status', 'role', 'description')
|
fields = ('pk', 'vid', 'site', 'group', 'name', 'prefixes', 'tenant', 'status', 'role', 'description')
|
||||||
|
|
||||||
|
|
||||||
class VLANSearchTable(SearchTable):
|
|
||||||
vid = tables.LinkColumn('ipam:vlan', args=[Accessor('pk')], verbose_name='ID')
|
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
|
|
||||||
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group')
|
|
||||||
tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
|
|
||||||
status = tables.TemplateColumn(STATUS_LABEL)
|
|
||||||
role = tables.TemplateColumn(VLAN_ROLE_LINK)
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = VLAN
|
|
||||||
fields = ('vid', 'site', 'group', 'name', 'tenant', 'status', 'role', 'description')
|
|
||||||
|
@ -103,8 +103,8 @@ class VRFView(View):
|
|||||||
def get(self, request, pk):
|
def get(self, request, pk):
|
||||||
|
|
||||||
vrf = get_object_or_404(VRF.objects.all(), pk=pk)
|
vrf = get_object_or_404(VRF.objects.all(), pk=pk)
|
||||||
prefix_table = tables.PrefixBriefTable(
|
prefix_table = tables.PrefixTable(
|
||||||
list(Prefix.objects.filter(vrf=vrf).select_related('site', 'role'))
|
list(Prefix.objects.filter(vrf=vrf).select_related('site', 'role')), orderable=False
|
||||||
)
|
)
|
||||||
prefix_table.exclude = ('vrf',)
|
prefix_table.exclude = ('vrf',)
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ class AggregateListView(ObjectListView):
|
|||||||
})
|
})
|
||||||
filter = filters.AggregateFilter
|
filter = filters.AggregateFilter
|
||||||
filter_form = forms.AggregateFilterForm
|
filter_form = forms.AggregateFilterForm
|
||||||
table = tables.AggregateTable
|
table = tables.AggregateDetailTable
|
||||||
template_name = 'ipam/aggregate_list.html'
|
template_name = 'ipam/aggregate_list.html'
|
||||||
|
|
||||||
def extra_context(self):
|
def extra_context(self):
|
||||||
@ -410,7 +410,7 @@ class PrefixListView(ObjectListView):
|
|||||||
queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
|
queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
|
||||||
filter = filters.PrefixFilter
|
filter = filters.PrefixFilter
|
||||||
filter_form = forms.PrefixFilterForm
|
filter_form = forms.PrefixFilterForm
|
||||||
table = tables.PrefixTable
|
table = tables.PrefixDetailTable
|
||||||
template_name = 'ipam/prefix_list.html'
|
template_name = 'ipam/prefix_list.html'
|
||||||
|
|
||||||
def alter_queryset(self, request):
|
def alter_queryset(self, request):
|
||||||
@ -445,7 +445,7 @@ class PrefixView(View):
|
|||||||
).select_related(
|
).select_related(
|
||||||
'site', 'role'
|
'site', 'role'
|
||||||
).annotate_depth()
|
).annotate_depth()
|
||||||
parent_prefix_table = tables.PrefixBriefTable(parent_prefixes)
|
parent_prefix_table = tables.PrefixTable(list(parent_prefixes), orderable=False)
|
||||||
parent_prefix_table.exclude = ('vrf',)
|
parent_prefix_table.exclude = ('vrf',)
|
||||||
|
|
||||||
# Duplicate prefixes table
|
# Duplicate prefixes table
|
||||||
@ -456,7 +456,7 @@ class PrefixView(View):
|
|||||||
).select_related(
|
).select_related(
|
||||||
'site', 'role'
|
'site', 'role'
|
||||||
)
|
)
|
||||||
duplicate_prefix_table = tables.PrefixBriefTable(list(duplicate_prefixes))
|
duplicate_prefix_table = tables.PrefixTable(list(duplicate_prefixes), orderable=False)
|
||||||
duplicate_prefix_table.exclude = ('vrf',)
|
duplicate_prefix_table.exclude = ('vrf',)
|
||||||
|
|
||||||
# Child prefixes table
|
# Child prefixes table
|
||||||
@ -585,7 +585,7 @@ class IPAddressListView(ObjectListView):
|
|||||||
queryset = IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device', 'nat_inside')
|
queryset = IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device', 'nat_inside')
|
||||||
filter = filters.IPAddressFilter
|
filter = filters.IPAddressFilter
|
||||||
filter_form = forms.IPAddressFilterForm
|
filter_form = forms.IPAddressFilterForm
|
||||||
table = tables.IPAddressTable
|
table = tables.IPAddressDetailTable
|
||||||
template_name = 'ipam/ipaddress_list.html'
|
template_name = 'ipam/ipaddress_list.html'
|
||||||
|
|
||||||
|
|
||||||
@ -601,7 +601,7 @@ class IPAddressView(View):
|
|||||||
).select_related(
|
).select_related(
|
||||||
'site', 'role'
|
'site', 'role'
|
||||||
)
|
)
|
||||||
parent_prefixes_table = tables.PrefixBriefTable(list(parent_prefixes))
|
parent_prefixes_table = tables.PrefixTable(list(parent_prefixes), orderable=False)
|
||||||
parent_prefixes_table.exclude = ('vrf',)
|
parent_prefixes_table.exclude = ('vrf',)
|
||||||
|
|
||||||
# Duplicate IPs table
|
# Duplicate IPs table
|
||||||
@ -612,7 +612,7 @@ class IPAddressView(View):
|
|||||||
).select_related(
|
).select_related(
|
||||||
'interface__device', 'nat_inside'
|
'interface__device', 'nat_inside'
|
||||||
)
|
)
|
||||||
duplicate_ips_table = tables.IPAddressBriefTable(list(duplicate_ips))
|
duplicate_ips_table = tables.IPAddressTable(list(duplicate_ips), orderable=False)
|
||||||
|
|
||||||
# Related IP table
|
# Related IP table
|
||||||
related_ips = IPAddress.objects.select_related(
|
related_ips = IPAddress.objects.select_related(
|
||||||
@ -622,7 +622,7 @@ class IPAddressView(View):
|
|||||||
).filter(
|
).filter(
|
||||||
vrf=ipaddress.vrf, address__net_contained_or_equal=str(ipaddress.address)
|
vrf=ipaddress.vrf, address__net_contained_or_equal=str(ipaddress.address)
|
||||||
)
|
)
|
||||||
related_ips_table = tables.IPAddressBriefTable(list(related_ips))
|
related_ips_table = tables.IPAddressTable(list(related_ips), orderable=False)
|
||||||
|
|
||||||
return render(request, 'ipam/ipaddress.html', {
|
return render(request, 'ipam/ipaddress.html', {
|
||||||
'ipaddress': ipaddress,
|
'ipaddress': ipaddress,
|
||||||
@ -722,7 +722,7 @@ class VLANListView(ObjectListView):
|
|||||||
queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role').prefetch_related('prefixes')
|
queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role').prefetch_related('prefixes')
|
||||||
filter = filters.VLANFilter
|
filter = filters.VLANFilter
|
||||||
filter_form = forms.VLANFilterForm
|
filter_form = forms.VLANFilterForm
|
||||||
table = tables.VLANTable
|
table = tables.VLANDetailTable
|
||||||
template_name = 'ipam/vlan_list.html'
|
template_name = 'ipam/vlan_list.html'
|
||||||
|
|
||||||
|
|
||||||
@ -734,7 +734,7 @@ class VLANView(View):
|
|||||||
'site__region', 'tenant__group', 'role'
|
'site__region', 'tenant__group', 'role'
|
||||||
), pk=pk)
|
), pk=pk)
|
||||||
prefixes = Prefix.objects.filter(vlan=vlan).select_related('vrf', 'site', 'role')
|
prefixes = Prefix.objects.filter(vlan=vlan).select_related('vrf', 'site', 'role')
|
||||||
prefix_table = tables.PrefixBriefTable(list(prefixes))
|
prefix_table = tables.PrefixTable(list(prefixes), orderable=False)
|
||||||
prefix_table.exclude = ('vlan',)
|
prefix_table.exclude = ('vlan',)
|
||||||
|
|
||||||
return render(request, 'ipam/vlan.html', {
|
return render(request, 'ipam/vlan.html', {
|
||||||
|
@ -11,20 +11,20 @@ from django.views.generic import View
|
|||||||
|
|
||||||
from circuits.filters import CircuitFilter, ProviderFilter
|
from circuits.filters import CircuitFilter, ProviderFilter
|
||||||
from circuits.models import Circuit, Provider
|
from circuits.models import Circuit, Provider
|
||||||
from circuits.tables import CircuitSearchTable, ProviderSearchTable
|
from circuits.tables import CircuitTable, ProviderTable
|
||||||
from dcim.filters import DeviceFilter, DeviceTypeFilter, RackFilter, SiteFilter
|
from dcim.filters import DeviceFilter, DeviceTypeFilter, RackFilter, SiteFilter
|
||||||
from dcim.models import ConsolePort, Device, DeviceType, InterfaceConnection, PowerPort, Rack, Site
|
from dcim.models import ConsolePort, Device, DeviceType, InterfaceConnection, PowerPort, Rack, Site
|
||||||
from dcim.tables import DeviceSearchTable, DeviceTypeSearchTable, RackSearchTable, SiteSearchTable
|
from dcim.tables import DeviceTable, DeviceTypeTable, RackTable, SiteTable
|
||||||
from extras.models import TopologyMap, UserAction
|
from extras.models import TopologyMap, UserAction
|
||||||
from ipam.filters import AggregateFilter, IPAddressFilter, PrefixFilter, VLANFilter, VRFFilter
|
from ipam.filters import AggregateFilter, IPAddressFilter, PrefixFilter, VLANFilter, VRFFilter
|
||||||
from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
|
from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
|
||||||
from ipam.tables import AggregateSearchTable, IPAddressSearchTable, PrefixSearchTable, VLANSearchTable, VRFSearchTable
|
from ipam.tables import AggregateTable, IPAddressTable, PrefixTable, VLANTable, VRFTable
|
||||||
from secrets.filters import SecretFilter
|
from secrets.filters import SecretFilter
|
||||||
from secrets.models import Secret
|
from secrets.models import Secret
|
||||||
from secrets.tables import SecretSearchTable
|
from secrets.tables import SecretTable
|
||||||
from tenancy.filters import TenantFilter
|
from tenancy.filters import TenantFilter
|
||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from tenancy.tables import TenantSearchTable
|
from tenancy.tables import TenantTable
|
||||||
from .forms import SearchForm
|
from .forms import SearchForm
|
||||||
|
|
||||||
|
|
||||||
@ -34,83 +34,85 @@ SEARCH_TYPES = OrderedDict((
|
|||||||
('provider', {
|
('provider', {
|
||||||
'queryset': Provider.objects.all(),
|
'queryset': Provider.objects.all(),
|
||||||
'filter': ProviderFilter,
|
'filter': ProviderFilter,
|
||||||
'table': ProviderSearchTable,
|
'table': ProviderTable,
|
||||||
'url': 'circuits:provider_list',
|
'url': 'circuits:provider_list',
|
||||||
}),
|
}),
|
||||||
('circuit', {
|
('circuit', {
|
||||||
'queryset': Circuit.objects.select_related('type', 'provider', 'tenant').prefetch_related('terminations__site'),
|
'queryset': Circuit.objects.select_related('type', 'provider', 'tenant').prefetch_related('terminations__site'),
|
||||||
'filter': CircuitFilter,
|
'filter': CircuitFilter,
|
||||||
'table': CircuitSearchTable,
|
'table': CircuitTable,
|
||||||
'url': 'circuits:circuit_list',
|
'url': 'circuits:circuit_list',
|
||||||
}),
|
}),
|
||||||
# DCIM
|
# DCIM
|
||||||
('site', {
|
('site', {
|
||||||
'queryset': Site.objects.select_related('region', 'tenant'),
|
'queryset': Site.objects.select_related('region', 'tenant'),
|
||||||
'filter': SiteFilter,
|
'filter': SiteFilter,
|
||||||
'table': SiteSearchTable,
|
'table': SiteTable,
|
||||||
'url': 'dcim:site_list',
|
'url': 'dcim:site_list',
|
||||||
}),
|
}),
|
||||||
('rack', {
|
('rack', {
|
||||||
'queryset': Rack.objects.select_related('site', 'group', 'tenant', 'role'),
|
'queryset': Rack.objects.select_related('site', 'group', 'tenant', 'role'),
|
||||||
'filter': RackFilter,
|
'filter': RackFilter,
|
||||||
'table': RackSearchTable,
|
'table': RackTable,
|
||||||
'url': 'dcim:rack_list',
|
'url': 'dcim:rack_list',
|
||||||
}),
|
}),
|
||||||
('devicetype', {
|
('devicetype', {
|
||||||
'queryset': DeviceType.objects.select_related('manufacturer'),
|
'queryset': DeviceType.objects.select_related('manufacturer'),
|
||||||
'filter': DeviceTypeFilter,
|
'filter': DeviceTypeFilter,
|
||||||
'table': DeviceTypeSearchTable,
|
'table': DeviceTypeTable,
|
||||||
'url': 'dcim:devicetype_list',
|
'url': 'dcim:devicetype_list',
|
||||||
}),
|
}),
|
||||||
('device', {
|
('device', {
|
||||||
'queryset': Device.objects.select_related('device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack'),
|
'queryset': Device.objects.select_related(
|
||||||
|
'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack'
|
||||||
|
),
|
||||||
'filter': DeviceFilter,
|
'filter': DeviceFilter,
|
||||||
'table': DeviceSearchTable,
|
'table': DeviceTable,
|
||||||
'url': 'dcim:device_list',
|
'url': 'dcim:device_list',
|
||||||
}),
|
}),
|
||||||
# IPAM
|
# IPAM
|
||||||
('vrf', {
|
('vrf', {
|
||||||
'queryset': VRF.objects.select_related('tenant'),
|
'queryset': VRF.objects.select_related('tenant'),
|
||||||
'filter': VRFFilter,
|
'filter': VRFFilter,
|
||||||
'table': VRFSearchTable,
|
'table': VRFTable,
|
||||||
'url': 'ipam:vrf_list',
|
'url': 'ipam:vrf_list',
|
||||||
}),
|
}),
|
||||||
('aggregate', {
|
('aggregate', {
|
||||||
'queryset': Aggregate.objects.select_related('rir'),
|
'queryset': Aggregate.objects.select_related('rir'),
|
||||||
'filter': AggregateFilter,
|
'filter': AggregateFilter,
|
||||||
'table': AggregateSearchTable,
|
'table': AggregateTable,
|
||||||
'url': 'ipam:aggregate_list',
|
'url': 'ipam:aggregate_list',
|
||||||
}),
|
}),
|
||||||
('prefix', {
|
('prefix', {
|
||||||
'queryset': Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role'),
|
'queryset': Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role'),
|
||||||
'filter': PrefixFilter,
|
'filter': PrefixFilter,
|
||||||
'table': PrefixSearchTable,
|
'table': PrefixTable,
|
||||||
'url': 'ipam:prefix_list',
|
'url': 'ipam:prefix_list',
|
||||||
}),
|
}),
|
||||||
('ipaddress', {
|
('ipaddress', {
|
||||||
'queryset': IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device'),
|
'queryset': IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device'),
|
||||||
'filter': IPAddressFilter,
|
'filter': IPAddressFilter,
|
||||||
'table': IPAddressSearchTable,
|
'table': IPAddressTable,
|
||||||
'url': 'ipam:ipaddress_list',
|
'url': 'ipam:ipaddress_list',
|
||||||
}),
|
}),
|
||||||
('vlan', {
|
('vlan', {
|
||||||
'queryset': VLAN.objects.select_related('site', 'group', 'tenant', 'role'),
|
'queryset': VLAN.objects.select_related('site', 'group', 'tenant', 'role'),
|
||||||
'filter': VLANFilter,
|
'filter': VLANFilter,
|
||||||
'table': VLANSearchTable,
|
'table': VLANTable,
|
||||||
'url': 'ipam:vlan_list',
|
'url': 'ipam:vlan_list',
|
||||||
}),
|
}),
|
||||||
# Secrets
|
# Secrets
|
||||||
('secret', {
|
('secret', {
|
||||||
'queryset': Secret.objects.select_related('role', 'device'),
|
'queryset': Secret.objects.select_related('role', 'device'),
|
||||||
'filter': SecretFilter,
|
'filter': SecretFilter,
|
||||||
'table': SecretSearchTable,
|
'table': SecretTable,
|
||||||
'url': 'secrets:secret_list',
|
'url': 'secrets:secret_list',
|
||||||
}),
|
}),
|
||||||
# Tenancy
|
# Tenancy
|
||||||
('tenant', {
|
('tenant', {
|
||||||
'queryset': Tenant.objects.select_related('group'),
|
'queryset': Tenant.objects.select_related('group'),
|
||||||
'filter': TenantFilter,
|
'filter': TenantFilter,
|
||||||
'table': TenantSearchTable,
|
'table': TenantTable,
|
||||||
'url': 'tenancy:tenant_list',
|
'url': 'tenancy:tenant_list',
|
||||||
}),
|
}),
|
||||||
))
|
))
|
||||||
@ -189,7 +191,7 @@ class SearchView(View):
|
|||||||
|
|
||||||
# Construct the results table for this object type
|
# Construct the results table for this object type
|
||||||
filtered_queryset = filter_cls({'q': form.cleaned_data['q']}, queryset=queryset).qs
|
filtered_queryset = filter_cls({'q': form.cleaned_data['q']}, queryset=queryset).qs
|
||||||
table = table(filtered_queryset)
|
table = table(filtered_queryset, orderable=False)
|
||||||
table.paginate(per_page=SEARCH_MAX_RESULTS)
|
table.paginate(per_page=SEARCH_MAX_RESULTS)
|
||||||
|
|
||||||
if table.page:
|
if table.page:
|
||||||
|
@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
|
|
||||||
from utilities.tables import BaseTable, SearchTable, ToggleColumn
|
from utilities.tables import BaseTable, ToggleColumn
|
||||||
|
|
||||||
from .models import SecretRole, Secret
|
from .models import SecretRole, Secret
|
||||||
|
|
||||||
@ -43,11 +43,3 @@ class SecretTable(BaseTable):
|
|||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Secret
|
model = Secret
|
||||||
fields = ('pk', 'device', 'role', 'name', 'last_updated')
|
fields = ('pk', 'device', 'role', 'name', 'last_updated')
|
||||||
|
|
||||||
|
|
||||||
class SecretSearchTable(SearchTable):
|
|
||||||
device = tables.LinkColumn()
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Secret
|
|
||||||
fields = ('device', 'role', 'name', 'last_updated')
|
|
||||||
|
@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
|
|
||||||
from utilities.tables import BaseTable, SearchTable, ToggleColumn
|
from utilities.tables import BaseTable, ToggleColumn
|
||||||
|
|
||||||
from .models import Tenant, TenantGroup
|
from .models import Tenant, TenantGroup
|
||||||
|
|
||||||
@ -43,11 +43,3 @@ class TenantTable(BaseTable):
|
|||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Tenant
|
model = Tenant
|
||||||
fields = ('pk', 'name', 'group', 'description')
|
fields = ('pk', 'name', 'group', 'description')
|
||||||
|
|
||||||
|
|
||||||
class TenantSearchTable(SearchTable):
|
|
||||||
name = tables.LinkColumn()
|
|
||||||
|
|
||||||
class Meta(SearchTable.Meta):
|
|
||||||
model = Tenant
|
|
||||||
fields = ('name', 'group', 'description')
|
|
||||||
|
@ -16,21 +16,10 @@ class BaseTable(tables.Table):
|
|||||||
if self.empty_text is None:
|
if self.empty_text is None:
|
||||||
self.empty_text = 'No {} found.'.format(self._meta.model._meta.verbose_name_plural)
|
self.empty_text = 'No {} found.'.format(self._meta.model._meta.verbose_name_plural)
|
||||||
|
|
||||||
class Meta:
|
|
||||||
attrs = {
|
|
||||||
'class': 'table table-hover',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class SearchTable(tables.Table):
|
|
||||||
"""
|
|
||||||
Default table for search results
|
|
||||||
"""
|
|
||||||
class Meta:
|
class Meta:
|
||||||
attrs = {
|
attrs = {
|
||||||
'class': 'table table-hover table-headings',
|
'class': 'table table-hover table-headings',
|
||||||
}
|
}
|
||||||
orderable = False
|
|
||||||
|
|
||||||
|
|
||||||
class ToggleColumn(tables.CheckBoxColumn):
|
class ToggleColumn(tables.CheckBoxColumn):
|
||||||
|
Reference in New Issue
Block a user