From cca44d44f7e19bdb8fd320a8e7554870d9d175bf Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 24 Oct 2018 14:59:46 -0400 Subject: [PATCH] Added cable filter form --- netbox/dcim/filters.py | 9 ++++++++- netbox/dcim/forms.py | 25 +++++++++++++++++++++---- netbox/dcim/tables.py | 16 ++++++++++------ netbox/dcim/views.py | 4 ++-- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 93d46bf01..d619e4f83 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -13,7 +13,7 @@ from .constants import ( WIRELESS_IFACE_TYPES, ) from .models import ( - ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, + Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate, InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis, @@ -785,6 +785,13 @@ class VirtualChassisFilter(django_filters.FilterSet): return queryset.filter(qs_filter) +class CableFilter(django_filters.FilterSet): + + class Meta: + model = Cable + fields = ['type', 'status', 'color'] + + class ConsoleConnectionFilter(django_filters.FilterSet): site = django_filters.CharFilter( method='filter_site', diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index e0e65aa3a..7b12db2e2 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -17,10 +17,11 @@ from tenancy.forms import TenancyForm from tenancy.models import Tenant from utilities.forms import ( AnnotatedMultipleChoiceField, APISelect, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm, - BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, ComponentForm, - ConfirmationForm, CSVChoiceField, ExpandableNameField, FilterChoiceField, FilterTreeNodeMultipleChoiceField, - FlexibleModelChoiceField, JSONField, Livesearch, SelectWithDisabled, SelectWithPK, SmallTextarea, SlugField, - ContentTypeSelect + BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, ColorSelect, CommentField, ComponentForm, + ConfirmationForm, ContentTypeSelect, CSVChoiceField, ExpandableNameField, FilterChoiceField, + FilterTreeNodeMultipleChoiceField, FlexibleModelChoiceField, JSONField, Livesearch, SelectWithPK, SmallTextarea, + SlugField, COLOR_CHOICES, + ) from virtualization.models import Cluster from .constants import * @@ -2212,6 +2213,22 @@ class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm): ) +class CableFilterForm(BootstrapMixin, forms.Form): + model = Cable + q = forms.CharField(required=False, label='Search') + type = AnnotatedMultipleChoiceField( + choices=CABLE_TYPE_CHOICES, + annotate=Cable.objects.all(), + annotate_field='type', + required=False + ) + color = forms.ChoiceField( + choices=add_blank_choice(COLOR_CHOICES), + widget=ColorSelect(), + required=False + ) + + # # Device bays # diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index c8566e008..3c8df2b06 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -621,35 +621,39 @@ class DeviceBayTable(BaseTable): # class CableTable(BaseTable): + # django-tables2 adds CSS `class="label"` which causes rendering issues + _label = tables.Column( + accessor=Accessor('label'), + verbose_name='Label' + ) device_a = tables.LinkColumn( viewname='dcim:device', accessor=Accessor('termination_a.device'), args=[Accessor('termination_a.device.pk')], + orderable=False, verbose_name='Device A' ) termination_a = tables.Column( accessor=Accessor('termination_a.name'), + orderable=False, verbose_name='Component' ) device_b = tables.LinkColumn( viewname='dcim:device', accessor=Accessor('termination_b.device'), args=[Accessor('termination_b.device.pk')], + orderable=False, verbose_name='Device B' ) termination_b = tables.Column( accessor=Accessor('termination_b.name'), + orderable=False, verbose_name='Component' ) - # django-tables2 adds CSS `class="label"` which causes rendering issues - _label = tables.Column( - accessor=Accessor('label'), - verbose_name='Label' - ) class Meta(BaseTable.Meta): model = Cable - fields = ('device_a', 'termination_a', 'device_b', 'termination_b', 'status', '_label', 'color') + fields = ('_label', 'device_a', 'termination_a', 'device_b', 'termination_b', 'status', 'type', 'color') # diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d16a59f5d..4ca87fc8f 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2017,8 +2017,8 @@ class CableListView(ObjectListView): queryset = Cable.objects.prefetch_related( 'termination_a__device', 'termination_b__device' ) - # filter = filters.CableFilter - # filter_form = forms.CableFilterForm + filter = filters.CableFilter + filter_form = forms.CableFilterForm table = tables.CableTable template_name = 'dcim/cable_list.html'