1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Collapsed EditTables into primary table for each object

This commit is contained in:
Jeremy Stretch
2016-05-13 11:51:50 -04:00
parent ffb1e7beb5
commit 062e64a34d
9 changed files with 82 additions and 230 deletions

View File

@ -9,32 +9,26 @@ from .models import Circuit, Provider
#
class ProviderTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
name = tables.LinkColumn('circuits:provider', args=[Accessor('slug')], verbose_name='Name')
asn = tables.Column(verbose_name='ASN')
circuit_count = tables.Column(accessor=Accessor('count_circuits'), verbose_name='Circuits')
class Meta:
model = Provider
fields = ('name', 'asn', 'circuit_count')
fields = ('pk', 'name', 'asn', 'circuit_count')
empty_text = "No providers found."
attrs = {
'class': 'table table-hover',
}
class ProviderBulkEditTable(ProviderTable):
pk = tables.CheckBoxColumn()
class Meta(ProviderTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'asn', 'circuit_count')
#
# Circuits
#
class CircuitTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
cid = tables.LinkColumn('circuits:circuit', args=[Accessor('pk')], verbose_name='ID')
type = tables.Column(verbose_name='Type')
provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')], verbose_name='Provider')
@ -44,16 +38,8 @@ class CircuitTable(tables.Table):
class Meta:
model = Circuit
fields = ('cid', 'type', 'provider', 'site', 'port_speed', 'commit_rate')
fields = ('pk', 'cid', 'type', 'provider', 'site', 'port_speed', 'commit_rate')
empty_text = "No circuits found."
attrs = {
'class': 'table table-hover',
}
class CircuitBulkEditTable(CircuitTable):
pk = tables.CheckBoxColumn()
class Meta(CircuitTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'cid', 'type', 'provider', 'site', 'port_speed', 'commit_rate')

View File

@ -10,7 +10,7 @@ from .filters import CircuitFilter
from .forms import CircuitForm, CircuitImportForm, CircuitBulkEditForm, CircuitBulkDeleteForm, CircuitFilterForm,\
ProviderForm, ProviderImportForm, ProviderBulkEditForm, ProviderBulkDeleteForm
from .models import Circuit, Provider
from .tables import CircuitTable, CircuitBulkEditTable, ProviderTable, ProviderBulkEditTable
from .tables import CircuitTable, ProviderTable
#
@ -20,8 +20,7 @@ from .tables import CircuitTable, CircuitBulkEditTable, ProviderTable, ProviderB
class ProviderListView(ObjectListView):
queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
table = ProviderTable
edit_table = ProviderBulkEditTable
edit_table_permissions = ['circuits.change_provider', 'circuits.delete_provider']
edit_permissions = ['circuits.change_provider', 'circuits.delete_provider']
template_name = 'circuits/provider_list.html'
@ -99,8 +98,7 @@ class CircuitListView(ObjectListView):
filter = CircuitFilter
filter_form = CircuitFilterForm
table = CircuitTable
edit_table = CircuitBulkEditTable
edit_table_permissions = ['circuits.change_circuit', 'circuits.delete_circuit']
edit_permissions = ['circuits.change_circuit', 'circuits.delete_circuit']
template_name = 'circuits/circuit_list.html'

View File

@ -9,11 +9,11 @@ DEVICE_LINK = """
"""
RACKGROUP_EDIT_LINK = """
<a href="{% url 'dcim:rackgroup_edit' pk=record.pk %}">Edit</a>
{% if perms.dcim.change_rackgroup %}<a href="{% url 'dcim:rackgroup_edit' pk=record.pk %}">Edit</a>{% endif %}
"""
DEVICEROLE_EDIT_LINK = """
<a href="{% url 'dcim:devicerole_edit' slug=record.slug %}">Edit</a>
{% if perms.dcim.change_devicerole %}<a href="{% url 'dcim:devicerole_edit' slug=record.slug %}">Edit</a>{% endif %}
"""
STATUS_ICON = """
@ -49,34 +49,28 @@ class SiteTable(tables.Table):
#
class RackGroupTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
name = tables.LinkColumn(verbose_name='Name')
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
rack_count = tables.Column(verbose_name='Racks')
slug = tables.Column(verbose_name='Slug')
edit = tables.TemplateColumn(template_code=RACKGROUP_EDIT_LINK, verbose_name='')
class Meta:
model = RackGroup
fields = ('name', 'site', 'rack_count', 'slug')
fields = ('pk', 'name', 'site', 'rack_count', 'slug', 'edit')
empty_text = "No rack groups were found."
attrs = {
'class': 'table table-hover',
}
class RackGroupBulkEditTable(RackGroupTable):
pk = tables.CheckBoxColumn()
edit = tables.TemplateColumn(template_code=RACKGROUP_EDIT_LINK, verbose_name='')
class Meta(RackGroupTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'site', 'rack_count', 'slug', 'edit')
#
# Racks
#
class RackTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
name = tables.LinkColumn('dcim:rack', args=[Accessor('pk')], verbose_name='Name')
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group')
@ -86,54 +80,40 @@ class RackTable(tables.Table):
class Meta:
model = Rack
fields = ('name', 'site', 'group', 'facility_id', 'u_height')
fields = ('pk', 'name', 'site', 'group', 'facility_id', 'u_height')
empty_text = "No racks were found."
attrs = {
'class': 'table table-hover',
}
class RackBulkEditTable(RackTable):
pk = tables.CheckBoxColumn()
class Meta(RackTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'site', 'group', 'facility_id', 'u_height')
#
# Device types
#
class DeviceTypeTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
model = tables.LinkColumn('dcim:devicetype', args=[Accessor('pk')], verbose_name='Device Type')
class Meta:
model = DeviceType
fields = ('model', 'manufacturer', 'u_height')
fields = ('pk', 'model', 'manufacturer', 'u_height')
empty_text = "No device types were found."
attrs = {
'class': 'table table-hover',
}
class DeviceTypeBulkEditTable(DeviceTypeTable):
pk = tables.CheckBoxColumn()
class Meta(DeviceTypeTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'model', 'manufacturer', 'u_height')
#
# Device type components
#
class ConsolePortTemplateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
class Meta:
model = ConsolePortTemplate
fields = ('name',)
fields = ('pk', 'name')
empty_text = "None"
show_header = False
attrs = {
@ -141,19 +121,12 @@ class ConsolePortTemplateTable(tables.Table):
}
class ConsolePortTemplateBulkDeleteTable(ConsolePortTemplateTable):
pk = tables.CheckBoxColumn()
class Meta(ConsolePortTemplateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name')
class ConsoleServerPortTemplateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
class Meta:
model = ConsoleServerPortTemplate
fields = ('name',)
fields = ('pk', 'name')
empty_text = "None"
show_header = False
attrs = {
@ -161,19 +134,12 @@ class ConsoleServerPortTemplateTable(tables.Table):
}
class ConsoleServerPortTemplateBulkDeleteTable(ConsoleServerPortTemplateTable):
pk = tables.CheckBoxColumn()
class Meta(ConsoleServerPortTemplateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name')
class PowerPortTemplateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
class Meta:
model = PowerPortTemplate
fields = ('name',)
fields = ('pk', 'name')
empty_text = "None"
show_header = False
attrs = {
@ -181,19 +147,12 @@ class PowerPortTemplateTable(tables.Table):
}
class PowerPortTemplateBulkDeleteTable(PowerPortTemplateTable):
pk = tables.CheckBoxColumn()
class Meta(PowerPortTemplateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name')
class PowerOutletTemplateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
class Meta:
model = PowerOutletTemplate
fields = ('name',)
fields = ('pk', 'name')
empty_text = "None"
show_header = False
attrs = {
@ -201,19 +160,12 @@ class PowerOutletTemplateTable(tables.Table):
}
class PowerOutletTemplateBulkDeleteTable(PowerOutletTemplateTable):
pk = tables.CheckBoxColumn()
class Meta(PowerOutletTemplateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name')
class InterfaceTemplateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
class Meta:
model = InterfaceTemplate
fields = ('name',)
fields = ('pk', 'name')
empty_text = "None"
show_header = False
attrs = {
@ -221,47 +173,33 @@ class InterfaceTemplateTable(tables.Table):
}
class InterfaceTemplateBulkDeleteTable(InterfaceTemplateTable):
pk = tables.CheckBoxColumn()
class Meta(InterfaceTemplateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name')
#
# Device roles
#
class DeviceRoleTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
name = tables.LinkColumn(verbose_name='Name')
device_count = tables.Column(verbose_name='Devices')
slug = tables.Column(verbose_name='Slug')
color = tables.Column(verbose_name='Color')
edit = tables.TemplateColumn(template_code=DEVICEROLE_EDIT_LINK, verbose_name='')
class Meta:
model = DeviceRole
fields = ('name', 'device_count', 'slug', 'color')
fields = ('pk', 'name', 'device_count', 'slug', 'color')
empty_text = "No device roles were found."
attrs = {
'class': 'table table-hover',
}
class DeviceRoleBulkEditTable(DeviceRoleTable):
pk = tables.CheckBoxColumn()
edit = tables.TemplateColumn(template_code=DEVICEROLE_EDIT_LINK, verbose_name='')
class Meta(DeviceRoleTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'device_count', 'slug', 'color')
#
# Devices
#
class DeviceTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
status = tables.TemplateColumn(template_code=STATUS_ICON, verbose_name='')
name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name')
site = tables.Column(accessor=Accessor('rack.site'), verbose_name='Site')
@ -272,21 +210,13 @@ class DeviceTable(tables.Table):
class Meta:
model = Device
fields = ('name', 'status', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
fields = ('pk', 'name', 'status', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
empty_text = "No devices were found."
attrs = {
'class': 'table table-hover',
}
class DeviceBulkEditTable(DeviceTable):
pk = tables.CheckBoxColumn()
class Meta(DeviceTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'status', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
class DeviceImportTable(tables.Table):
name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name')
site = tables.Column(accessor=Accessor('rack.site'), verbose_name='Site')

View File

@ -36,12 +36,10 @@ from .forms import SiteForm, SiteImportForm, RackGroupForm, RackGroupFilterForm,
from .models import Site, RackGroup, Rack, DeviceType, DeviceRole, ConsolePortTemplate, ConsoleServerPortTemplate, \
PowerPortTemplate, PowerOutletTemplate, InterfaceTemplate, Device, ConsolePort, ConsoleServerPort, PowerPort, \
PowerOutlet, Interface, InterfaceConnection, Module, CONNECTION_STATUS_CONNECTED
from .tables import SiteTable, RackGroupTable, RackGroupBulkEditTable, RackTable, RackBulkEditTable, DeviceTypeTable, \
DeviceTypeBulkEditTable, DeviceRoleTable, DeviceRoleBulkEditTable, DeviceTable, DeviceBulkEditTable, \
from .tables import SiteTable, RackGroupTable, RackTable, DeviceTypeTable, DeviceRoleTable, DeviceTable, \
DeviceImportTable, ConsoleConnectionTable, PowerConnectionTable, InterfaceConnectionTable, \
ConsolePortTemplateTable, ConsoleServerPortTemplateTable, PowerPortTemplateTable, PowerOutletTemplateTable, \
InterfaceTemplateTable, ConsolePortTemplateBulkDeleteTable, ConsoleServerPortTemplateBulkDeleteTable, \
PowerPortTemplateBulkDeleteTable, PowerOutletTemplateBulkDeleteTable, InterfaceTemplateBulkDeleteTable
InterfaceTemplateTable
EXPANSION_PATTERN = '\[(\d+-\d+)\]'
@ -137,8 +135,7 @@ class RackGroupListView(ObjectListView):
filter = RackGroupFilter
filter_form = RackGroupFilterForm
table = RackGroupTable
edit_table = RackGroupBulkEditTable
edit_table_permissions = ['dcim.change_rackgroup', 'dcim.delete_rackgroup']
edit_permissions = ['dcim.change_rackgroup', 'dcim.delete_rackgroup']
template_name = 'dcim/rackgroup_list.html'
@ -172,8 +169,7 @@ class RackListView(ObjectListView):
filter = RackFilter
filter_form = RackFilterForm
table = RackTable
edit_table = RackBulkEditTable
edit_table_permissions = ['dcim.change_rack', 'dcim.delete_rack']
edit_permissions = ['dcim.change_rack', 'dcim.delete_rack']
template_name = 'dcim/rack_list.html'
@ -258,8 +254,7 @@ class DeviceTypeListView(ObjectListView):
filter = DeviceTypeFilter
filter_form = DeviceTypeFilterForm
table = DeviceTypeTable
edit_table = DeviceTypeBulkEditTable
edit_table_permissions = ['dcim.change_devicetype', 'dcim.delete_devicetype']
edit_permissions = ['dcim.change_devicetype', 'dcim.delete_devicetype']
template_name = 'dcim/devicetype_list.html'
@ -268,18 +263,17 @@ def devicetype(request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
# Component tables
consoleport_table = ConsolePortTemplateTable(ConsolePortTemplate.objects.filter(device_type=devicetype))
consoleserverport_table = ConsoleServerPortTemplateTable(ConsoleServerPortTemplate.objects.filter(device_type=devicetype))
powerport_table = PowerPortTemplateTable(PowerPortTemplate.objects.filter(device_type=devicetype))
poweroutlet_table = PowerOutletTemplateTable(PowerOutletTemplate.objects.filter(device_type=devicetype))
interface_table = InterfaceTemplateTable(InterfaceTemplate.objects.filter(device_type=devicetype))
if request.user.has_perm('dcim.change_devicetype'):
consoleport_table = ConsolePortTemplateBulkDeleteTable(ConsolePortTemplate.objects.filter(device_type=devicetype))
consoleserverport_table = ConsoleServerPortTemplateBulkDeleteTable(ConsoleServerPortTemplate.objects.filter(device_type=devicetype))
powerport_table = PowerPortTemplateBulkDeleteTable(PowerPortTemplate.objects.filter(device_type=devicetype))
poweroutlet_table = PowerOutletTemplateBulkDeleteTable(PowerOutletTemplate.objects.filter(device_type=devicetype))
interface_table = InterfaceTemplateBulkDeleteTable(InterfaceTemplate.objects.filter(device_type=devicetype))
else:
consoleport_table = ConsolePortTemplateTable(ConsolePortTemplate.objects.filter(device_type=devicetype))
consoleserverport_table = ConsoleServerPortTemplateTable(ConsoleServerPortTemplate.objects.filter(device_type=devicetype))
powerport_table = PowerPortTemplateTable(PowerPortTemplate.objects.filter(device_type=devicetype))
poweroutlet_table = PowerOutletTemplateTable(PowerOutletTemplate.objects.filter(device_type=devicetype))
interface_table = InterfaceTemplateTable(InterfaceTemplate.objects.filter(device_type=devicetype))
consoleport_table.base_columns['pk'].visible = True
consoleserverport_table.base_columns['pk'].visible = True
powerport_table.base_columns['pk'].visible = True
poweroutlet_table.base_columns['pk'].visible = True
interface_table.base_columns['pk'].visible = True
return render(request, 'dcim/devicetype.html', {
'devicetype': devicetype,
@ -343,7 +337,7 @@ class ComponentTemplateCreateView(View):
model = None
form = None
def get(self, request, pk, *args, **kwargs):
def get(self, request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
@ -354,7 +348,7 @@ class ComponentTemplateCreateView(View):
'cancel_url': reverse('dcim:devicetype', kwargs={'pk': devicetype.pk}),
})
def post(self, request, pk, *args, **kwargs):
def post(self, request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
@ -459,8 +453,7 @@ def component_template_delete(request, pk, model):
class DeviceRoleListView(ObjectListView):
queryset = DeviceRole.objects.annotate(device_count=Count('devices'))
table = DeviceRoleTable
edit_table = DeviceRoleBulkEditTable
edit_table_permissions = ['dcim.change_devicerole', 'dcim.delete_devicerole']
edit_permissions = ['dcim.change_devicerole', 'dcim.delete_devicerole']
template_name = 'dcim/devicerole_list.html'
@ -495,8 +488,7 @@ class DeviceListView(ObjectListView):
filter = DeviceFilter
filter_form = DeviceFilterForm
table = DeviceTable
edit_table = DeviceBulkEditTable
edit_table_permissions = ['dcim.change_device', 'dcim.delete_device']
edit_permissions = ['dcim.change_device', 'dcim.delete_device']
template_name = 'dcim/device_list.html'

View File

@ -45,32 +45,26 @@ STATUS_LABEL = """
#
class VRFTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
name = tables.LinkColumn('ipam:vrf', args=[Accessor('pk')], verbose_name='Name')
rd = tables.Column(verbose_name='RD')
description = tables.Column(sortable=False, verbose_name='Description')
class Meta:
model = VRF
fields = ('name', 'rd', 'description')
fields = ('pk', 'name', 'rd', 'description')
empty_text = "No VRFs found."
attrs = {
'class': 'table table-hover',
}
class VRFBulkEditTable(VRFTable):
pk = tables.CheckBoxColumn()
class Meta(VRFTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'name', 'rd', 'description')
#
# Aggregates
#
class AggregateTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
prefix = tables.LinkColumn('ipam:aggregate', args=[Accessor('pk')], verbose_name='Aggregate')
rir = tables.Column(verbose_name='RIR')
child_count = tables.Column(verbose_name='Prefixes')
@ -80,26 +74,19 @@ class AggregateTable(tables.Table):
class Meta:
model = Aggregate
fields = ('prefix', 'rir', 'child_count', 'utilization', 'date_added', 'description')
fields = ('pk', 'prefix', 'rir', 'child_count', 'utilization', 'date_added', 'description')
empty_text = "No aggregates found."
attrs = {
'class': 'table table-hover',
}
class AggregateBulkEditTable(AggregateTable):
pk = tables.CheckBoxColumn()
class Meta(AggregateTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'prefix', 'rir', 'child_count', 'utilization', 'date_added', 'description')
#
# Prefixes
#
class PrefixTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
status = tables.TemplateColumn(STATUS_LABEL, verbose_name='Status')
prefix = tables.TemplateColumn(PREFIX_LINK, verbose_name='Prefix')
vrf = tables.Column(orderable=False, default='Global', verbose_name='VRF')
@ -109,7 +96,7 @@ class PrefixTable(tables.Table):
class Meta:
model = Prefix
fields = ('prefix', 'status', 'vrf', 'site', 'role', 'description')
fields = ('pk', 'prefix', 'status', 'vrf', 'site', 'role', 'description')
empty_text = "No prefixes found."
attrs = {
'class': 'table table-hover',
@ -131,19 +118,12 @@ class PrefixBriefTable(tables.Table):
}
class PrefixBulkEditTable(PrefixTable):
pk = tables.CheckBoxColumn(default='')
class Meta(PrefixTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'prefix', 'status', 'vrf', 'site', 'role', 'description')
#
# IPAddresses
#
class IPAddressTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
address = tables.LinkColumn('ipam:ipaddress', args=[Accessor('pk')], verbose_name='IP Address')
vrf = tables.Column(orderable=False, default='Global', verbose_name='VRF')
device = tables.LinkColumn('dcim:device', args=[Accessor('interface.device.pk')], orderable=False, verbose_name='Device')
@ -152,7 +132,7 @@ class IPAddressTable(tables.Table):
class Meta:
model = IPAddress
fields = ('address', 'vrf', 'device', 'interface', 'description')
fields = ('pk', 'address', 'vrf', 'device', 'interface', 'description')
empty_text = "No IP addresses found."
attrs = {
'class': 'table table-hover',
@ -174,19 +154,12 @@ class IPAddressBriefTable(tables.Table):
}
class IPAddressBulkEditTable(IPAddressTable):
pk = tables.CheckBoxColumn()
class Meta(IPAddressTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'address', 'vrf', 'device', 'interface', 'description')
#
# VLANs
#
class VLANTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
vid = tables.LinkColumn('ipam:vlan', args=[Accessor('pk')], verbose_name='ID')
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
name = tables.Column(verbose_name='Name')
@ -195,16 +168,8 @@ class VLANTable(tables.Table):
class Meta:
model = VLAN
fields = ('vid', 'site', 'name', 'status', 'role')
fields = ('pk', 'vid', 'site', 'name', 'status', 'role')
empty_text = "No VLANs found."
attrs = {
'class': 'table table-hover',
}
class VLANBulkEditTable(VLANTable):
pk = tables.CheckBoxColumn()
class Meta(VLANTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'vid', 'site', 'name', 'status', 'role')

View File

@ -17,10 +17,9 @@ from .forms import AggregateForm, AggregateImportForm, AggregateBulkEditForm, Ag
IPAddressForm, IPAddressImportForm, IPAddressBulkEditForm, IPAddressBulkDeleteForm, IPAddressFilterForm, VLANForm,\
VLANImportForm, VLANBulkEditForm, VLANBulkDeleteForm, VRFForm, VRFImportForm, VRFBulkEditForm, VRFBulkDeleteForm,\
VLANFilterForm
from .models import VRF, Aggregate, Prefix, VLAN
from .tables import AggregateTable, AggregateBulkEditTable, PrefixTable, PrefixBriefTable, PrefixBulkEditTable,\
IPAddress, IPAddressBriefTable, IPAddressTable, IPAddressBulkEditTable, VLANTable, VLANBulkEditTable, VRFTable,\
VRFBulkEditTable
from .models import VRF, Aggregate, Prefix, IPAddress, VLAN
from .tables import AggregateTable, PrefixTable, PrefixBriefTable, IPAddressBriefTable, IPAddressTable, VLANTable,\
VRFTable
def add_available_prefixes(parent, prefix_list):
@ -47,8 +46,7 @@ class VRFListView(ObjectListView):
queryset = VRF.objects.all()
filter = VRFFilter
table = VRFTable
edit_table = VRFBulkEditTable
edit_table_permissions = ['ipam.change_vrf', 'ipam.delete_vrf']
edit_permissions = ['ipam.change_vrf', 'ipam.delete_vrf']
template_name = 'ipam/vrf_list.html'
@ -126,8 +124,7 @@ class AggregateListView(ObjectListView):
filter = AggregateFilter
filter_form = AggregateFilterForm
table = AggregateTable
edit_table = AggregateBulkEditTable
edit_table_permissions = ['ipam.change_aggregate', 'ipam.delete_aggregate']
edit_permissions = ['ipam.change_aggregate', 'ipam.delete_aggregate']
template_name = 'ipam/aggregate_list.html'
@ -140,10 +137,9 @@ def aggregate(request, pk):
.select_related('site', 'status', 'role').annotate_depth(limit=0)
child_prefixes = add_available_prefixes(aggregate.prefix, child_prefixes)
prefix_table = PrefixTable(child_prefixes)
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
prefix_table = PrefixBulkEditTable(child_prefixes)
else:
prefix_table = PrefixTable(child_prefixes)
prefix_table.base_columns['pk'].visible = True
RequestConfig(request, paginate={'per_page': settings.PAGINATE_COUNT, 'klass': EnhancedPaginator})\
.configure(prefix_table)
@ -214,8 +210,7 @@ class PrefixListView(ObjectListView):
filter = PrefixFilter
filter_form = PrefixFilterForm
table = PrefixTable
edit_table = PrefixBulkEditTable
edit_table_permissions = ['ipam.change_prefix', 'ipam.delete_prefix']
edit_permissions = ['ipam.change_prefix', 'ipam.delete_prefix']
template_name = 'ipam/prefix_list.html'
def alter_queryset(self, request):
@ -251,10 +246,9 @@ def prefix(request, pk):
.select_related('site', 'status', 'role').annotate_depth(limit=0)
if child_prefixes:
child_prefixes = add_available_prefixes(prefix.prefix, child_prefixes)
child_prefix_table = PrefixTable(child_prefixes)
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
child_prefix_table = PrefixBulkEditTable(child_prefixes)
else:
child_prefix_table = PrefixTable(child_prefixes)
child_prefix_table.base_columns['pk'].visible = True
RequestConfig(request, paginate={'per_page': settings.PAGINATE_COUNT, 'klass': EnhancedPaginator})\
.configure(child_prefix_table)
@ -333,10 +327,9 @@ def prefix_ipaddresses(request, pk):
ipaddresses = IPAddress.objects.filter(address__net_contained_or_equal=str(prefix.prefix))\
.select_related('vrf', 'interface__device', 'primary_for')
ip_table = IPAddressTable(ipaddresses)
if request.user.has_perm('ipam.change_ipaddress') or request.user.has_perm('ipam.delete_ipaddress'):
ip_table = IPAddressBulkEditTable(ipaddresses)
else:
ip_table = IPAddressTable(ipaddresses)
ip_table.base_columns['pk'].visible = True
RequestConfig(request, paginate={'per_page': settings.PAGINATE_COUNT, 'klass': EnhancedPaginator})\
.configure(ip_table)
@ -355,8 +348,7 @@ class IPAddressListView(ObjectListView):
filter = IPAddressFilter
filter_form = IPAddressFilterForm
table = IPAddressTable
edit_table = IPAddressBulkEditTable
edit_table_permissions = ['ipam.change_ipaddress', 'ipam.delete_ipaddress']
edit_permissions = ['ipam.change_ipaddress', 'ipam.delete_ipaddress']
template_name = 'ipam/ipaddress_list.html'
@ -455,8 +447,7 @@ class VLANListView(ObjectListView):
filter = VLANFilter
filter_form = VLANFilterForm
table = VLANTable
edit_table = VLANBulkEditTable
edit_table_permissions = ['ipam.change_vlan', 'ipam.delete_vlan']
edit_permissions = ['ipam.change_vlan', 'ipam.delete_vlan']
template_name = 'ipam/vlan_list.html'

View File

@ -9,6 +9,7 @@ from .models import Secret
#
class SecretTable(tables.Table):
pk = tables.CheckBoxColumn(visible=False, default='')
device = tables.LinkColumn('secrets:secret', args=[Accessor('pk')], verbose_name='Device')
role = tables.Column(verbose_name='Role')
name = tables.Column(verbose_name='Name')
@ -16,16 +17,8 @@ class SecretTable(tables.Table):
class Meta:
model = Secret
fields = ('device', 'role', 'name', 'last_modified')
fields = ('pk', 'device', 'role', 'name', 'last_modified')
empty_text = "No secrets found."
attrs = {
'class': 'table table-hover',
}
class SecretBulkEditTable(SecretTable):
pk = tables.CheckBoxColumn()
class Meta(SecretTable.Meta):
model = None # django_tables2 bugfix
fields = ('pk', 'device', 'role', 'name')

View File

@ -13,7 +13,7 @@ from .decorators import userkey_required
from .filters import SecretFilter
from .forms import SecretForm, SecretImportForm, SecretBulkEditForm, SecretBulkDeleteForm, SecretFilterForm
from .models import Secret, UserKey
from .tables import SecretTable, SecretBulkEditTable
from .tables import SecretTable
#
@ -26,8 +26,7 @@ class SecretListView(ObjectListView):
filter = SecretFilter
filter_form = SecretFilterForm
table = SecretTable
edit_table = SecretBulkEditTable
edit_table_permissions = ['secrets.change_secret', 'secrets.delete_secret']
edit_permissions = ['secrets.change_secret', 'secrets.delete_secret']
template_name = 'secrets/secret_list.html'

View File

@ -25,8 +25,7 @@ class ObjectListView(View):
filter = None
filter_form = None
table = None
edit_table = None
edit_table_permissions = []
edit_permissions = []
template_name = None
redirect_on_single_result = True
@ -58,10 +57,9 @@ class ObjectListView(View):
self.queryset = self.alter_queryset(request)
# Construct the table based on the user's permissions
if any([request.user.has_perm(perm) for perm in self.edit_table_permissions]):
table = self.edit_table(self.queryset)
else:
table = self.table(self.queryset)
table = self.table(self.queryset)
if 'pk' in table.base_columns and any([request.user.has_perm(perm) for perm in self.edit_permissions]):
table.base_columns['pk'].visible = True
RequestConfig(request, paginate={'per_page': settings.PAGINATE_COUNT, 'klass': EnhancedPaginator})\
.configure(table)