Added cable filter form

This commit is contained in:
Jeremy Stretch 2018-10-24 14:59:46 -04:00
parent 54c917beff
commit cca44d44f7
4 changed files with 41 additions and 13 deletions

View File

@ -13,7 +13,7 @@ from .constants import (
WIRELESS_IFACE_TYPES, WIRELESS_IFACE_TYPES,
) )
from .models import ( from .models import (
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate, DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis, RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
@ -785,6 +785,13 @@ class VirtualChassisFilter(django_filters.FilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
class CableFilter(django_filters.FilterSet):
class Meta:
model = Cable
fields = ['type', 'status', 'color']
class ConsoleConnectionFilter(django_filters.FilterSet): class ConsoleConnectionFilter(django_filters.FilterSet):
site = django_filters.CharFilter( site = django_filters.CharFilter(
method='filter_site', method='filter_site',

View File

@ -17,10 +17,11 @@ from tenancy.forms import TenancyForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import ( from utilities.forms import (
AnnotatedMultipleChoiceField, APISelect, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm, AnnotatedMultipleChoiceField, APISelect, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm,
BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, ComponentForm, BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, ColorSelect, CommentField, ComponentForm,
ConfirmationForm, CSVChoiceField, ExpandableNameField, FilterChoiceField, FilterTreeNodeMultipleChoiceField, ConfirmationForm, ContentTypeSelect, CSVChoiceField, ExpandableNameField, FilterChoiceField,
FlexibleModelChoiceField, JSONField, Livesearch, SelectWithDisabled, SelectWithPK, SmallTextarea, SlugField, FilterTreeNodeMultipleChoiceField, FlexibleModelChoiceField, JSONField, Livesearch, SelectWithPK, SmallTextarea,
ContentTypeSelect SlugField, COLOR_CHOICES,
) )
from virtualization.models import Cluster from virtualization.models import Cluster
from .constants import * 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 # Device bays
# #

View File

@ -621,35 +621,39 @@ class DeviceBayTable(BaseTable):
# #
class CableTable(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( device_a = tables.LinkColumn(
viewname='dcim:device', viewname='dcim:device',
accessor=Accessor('termination_a.device'), accessor=Accessor('termination_a.device'),
args=[Accessor('termination_a.device.pk')], args=[Accessor('termination_a.device.pk')],
orderable=False,
verbose_name='Device A' verbose_name='Device A'
) )
termination_a = tables.Column( termination_a = tables.Column(
accessor=Accessor('termination_a.name'), accessor=Accessor('termination_a.name'),
orderable=False,
verbose_name='Component' verbose_name='Component'
) )
device_b = tables.LinkColumn( device_b = tables.LinkColumn(
viewname='dcim:device', viewname='dcim:device',
accessor=Accessor('termination_b.device'), accessor=Accessor('termination_b.device'),
args=[Accessor('termination_b.device.pk')], args=[Accessor('termination_b.device.pk')],
orderable=False,
verbose_name='Device B' verbose_name='Device B'
) )
termination_b = tables.Column( termination_b = tables.Column(
accessor=Accessor('termination_b.name'), accessor=Accessor('termination_b.name'),
orderable=False,
verbose_name='Component' 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): class Meta(BaseTable.Meta):
model = Cable 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')
# #

View File

@ -2017,8 +2017,8 @@ class CableListView(ObjectListView):
queryset = Cable.objects.prefetch_related( queryset = Cable.objects.prefetch_related(
'termination_a__device', 'termination_b__device' 'termination_a__device', 'termination_b__device'
) )
# filter = filters.CableFilter filter = filters.CableFilter
# filter_form = forms.CableFilterForm filter_form = forms.CableFilterForm
table = tables.CableTable table = tables.CableTable
template_name = 'dcim/cable_list.html' template_name = 'dcim/cable_list.html'