Add back device search to allow export filter more specifically incase of overlap

This commit is contained in:
Joseph Kennedy 2017-08-31 18:22:44 -04:00
parent 1e51f884e5
commit 8277b423d6
2 changed files with 17 additions and 2 deletions

View File

@ -582,6 +582,11 @@ class InterfaceListFilter(django_filters.FilterSet):
method='search',
label='Search',
)
device = django_filters.CharFilter(
method='filter_device',
name='name',
label='Device',
)
site = django_filters.CharFilter(
method='filter_site',
label='Site (slug)',
@ -613,6 +618,14 @@ class InterfaceListFilter(django_filters.FilterSet):
model = Interface
fields = ['form_factor', 'enabled', 'mtu']
def filter_device(self, queryset, name, value):
try:
device = Device.objects.select_related('device_type').get(**{name: value})
ordering = device.device_type.interface_ordering
return queryset.filter(device=device).order_naturally(ordering)
except Device.DoesNotExist:
return queryset.none()
def filter_site(self, queryset, name, value):
if not value.strip():
return queryset

View File

@ -1623,7 +1623,7 @@ class InterfaceListFilterForm(BootstrapMixin, forms.Form):
rack_group_id = FilterChoiceField(
required=False,
queryset=RackGroup.objects.select_related('site').annotate(filter_count=Count('racks__devices')),
label='Rack group',
label='Rack Group',
null_option=(0, 'None')
)
rack_id = FilterChoiceField(
@ -1636,8 +1636,10 @@ class InterfaceListFilterForm(BootstrapMixin, forms.Form):
role = FilterChoiceField(
required=False,
queryset=DeviceRole.objects.annotate(filter_count=Count('devices')),
to_field_name='slug'
to_field_name='slug',
label='Device Role'
)
device = forms.CharField(required=False, label='Device Name')
#