From 92bdddf3ec9cbf0d5762cc19f9dad2fd14a0137d Mon Sep 17 00:00:00 2001 From: dirtycajunrice <1%Complete> Date: Mon, 30 Oct 2017 15:02:15 -0500 Subject: [PATCH] fixed prefix header to represent new serial "vlan_vid" --- netbox/dcim/filters.py | 10 ++++++++++ netbox/dcim/forms.py | 9 +++++++-- netbox/dcim/tables.py | 2 ++ netbox/dcim/views.py | 16 +++++++++++----- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 6e0c6fa3d..ab28a55a4 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -204,6 +204,16 @@ class RackReservationFilter(django_filters.FilterSet): to_field_name='slug', label='Group', ) + tenant_id = NullableModelMultipleChoiceFilter( + queryset=Tenant.objects.all(), + label='Tenant (ID)', + ) + tenant = NullableModelMultipleChoiceFilter( + name='tenant', + queryset=Tenant.objects.all(), + to_field_name='slug', + label='Tenant (slug)', + ) user_id = django_filters.ModelMultipleChoiceFilter( queryset=User.objects.all(), label='User (ID)', diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index c3a545f7c..0545df111 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -409,6 +409,11 @@ class RackReservationFilterForm(BootstrapMixin, forms.Form): label='Rack group', null_option=(0, 'None') ) + tenant = FilterChoiceField( + queryset=Tenant.objects.annotate(filter_count=Count('racks')), + to_field_name='slug', + null_option=(0, 'None') + ) # @@ -790,10 +795,10 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm): pk = self.instance.pk if self.instance.pk else None try: if self.is_bound and self.data.get('rack') and str(self.data.get('face')): - position_choices = Rack.objects.get(pk=self.data['rack'])\ + position_choices = Rack.objects.get(pk=self.data['rack']) \ .get_rack_units(face=self.data.get('face'), exclude=pk) elif self.initial.get('rack') and str(self.initial.get('face')): - position_choices = Rack.objects.get(pk=self.initial['rack'])\ + position_choices = Rack.objects.get(pk=self.initial['rack']) \ .get_rack_units(face=self.initial.get('face'), exclude=pk) else: position_choices = [] diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 5f41b9dfa..ce1d285b3 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -245,6 +245,8 @@ class RackImportTable(BaseTable): class RackReservationTable(BaseTable): pk = ToggleColumn() + site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')]) + tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')]) rack = tables.LinkColumn('dcim:rack', args=[Accessor('rack.pk')]) unit_list = tables.Column(orderable=False, verbose_name='Units') actions = tables.TemplateColumn( diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index e0ab7f1f2..c54a128e5 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -325,7 +325,7 @@ class RackView(View): rack = get_object_or_404(Rack.objects.select_related('site__region', 'tenant__group', 'group', 'role'), pk=pk) - nonracked_devices = Device.objects.filter(rack=rack, position__isnull=True, parent_bay__isnull=True)\ + nonracked_devices = Device.objects.filter(rack=rack, position__isnull=True, parent_bay__isnull=True) \ .select_related('device_type__manufacturer') next_rack = Rack.objects.filter(site=rack.site, name__gt=rack.name).order_by('name').first() prev_rack = Rack.objects.filter(site=rack.site, name__lt=rack.name).order_by('-name').first() @@ -392,7 +392,13 @@ class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class RackReservationListView(ObjectListView): - queryset = RackReservation.objects.all() + queryset = RackReservation.objects.select_related( + 'site', 'tenant' + ).prefetch_related( + 'devices__device_type' + ).annotate( + device_count=Count('devices', distinct=True) + ) filter = filters.RackReservationFilter filter_form = forms.RackReservationFilterForm table = tables.RackReservationTable @@ -1771,7 +1777,7 @@ class InterfaceConnectionsBulkImportView(PermissionRequiredMixin, BulkImportView # class ConsoleConnectionsListView(ObjectListView): - queryset = ConsolePort.objects.select_related('device', 'cs_port__device').filter(cs_port__isnull=False)\ + queryset = ConsolePort.objects.select_related('device', 'cs_port__device').filter(cs_port__isnull=False) \ .order_by('cs_port__device__name', 'cs_port__name') filter = filters.ConsoleConnectionFilter filter_form = forms.ConsoleConnectionFilterForm @@ -1780,7 +1786,7 @@ class ConsoleConnectionsListView(ObjectListView): class PowerConnectionsListView(ObjectListView): - queryset = PowerPort.objects.select_related('device', 'power_outlet__device').filter(power_outlet__isnull=False)\ + queryset = PowerPort.objects.select_related('device', 'power_outlet__device').filter(power_outlet__isnull=False) \ .order_by('power_outlet__device__name', 'power_outlet__name') filter = filters.PowerConnectionFilter filter_form = forms.PowerConnectionFilterForm @@ -1789,7 +1795,7 @@ class PowerConnectionsListView(ObjectListView): class InterfaceConnectionsListView(ObjectListView): - queryset = InterfaceConnection.objects.select_related('interface_a__device', 'interface_b__device')\ + queryset = InterfaceConnection.objects.select_related('interface_a__device', 'interface_b__device') \ .order_by('interface_a__device__name', 'interface_a__name') filter = filters.InterfaceConnectionFilter filter_form = forms.InterfaceConnectionFilterForm