From 062e64a34dc36df816e555a821177ab8727cf250 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 13 May 2016 11:51:50 -0400 Subject: [PATCH] Collapsed EditTables into primary table for each object --- netbox/circuits/tables.py | 22 ++----- netbox/circuits/views.py | 8 +-- netbox/dcim/tables.py | 118 ++++++++------------------------------ netbox/dcim/views.py | 46 ++++++--------- netbox/ipam/tables.py | 55 ++++-------------- netbox/ipam/views.py | 37 +++++------- netbox/secrets/tables.py | 11 +--- netbox/secrets/views.py | 5 +- netbox/utilities/views.py | 10 ++-- 9 files changed, 82 insertions(+), 230 deletions(-) diff --git a/netbox/circuits/tables.py b/netbox/circuits/tables.py index 1aa951408..251462861 100644 --- a/netbox/circuits/tables.py +++ b/netbox/circuits/tables.py @@ -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') diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index a6f8740d3..586fac25e 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -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' diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 7c4378c45..8dc93ba4c 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -9,11 +9,11 @@ DEVICE_LINK = """ """ RACKGROUP_EDIT_LINK = """ -Edit +{% if perms.dcim.change_rackgroup %}Edit{% endif %} """ DEVICEROLE_EDIT_LINK = """ -Edit +{% if perms.dcim.change_devicerole %}Edit{% 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') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 9874ffd03..13bbe34b5 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -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' diff --git a/netbox/ipam/tables.py b/netbox/ipam/tables.py index 2ffd68c61..bb5418f54 100644 --- a/netbox/ipam/tables.py +++ b/netbox/ipam/tables.py @@ -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') diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index a241cfe51..d44e9f9dc 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -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' diff --git a/netbox/secrets/tables.py b/netbox/secrets/tables.py index f1d1bfd5b..ac9fc12bc 100644 --- a/netbox/secrets/tables.py +++ b/netbox/secrets/tables.py @@ -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') diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index 6e251313d..67e724f8b 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -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' diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index 206576d49..adf07b9b5 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -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)