mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 00:28:16 -06:00
Add filter fields and add generic search to InterfaceFilterForm
This commit is contained in:
parent
d0327c8b0d
commit
0b8d251cd6
@ -519,8 +519,7 @@ class PowerOutletFilter(DeviceComponentFilterSet):
|
|||||||
|
|
||||||
class InterfaceFilter(django_filters.FilterSet):
|
class InterfaceFilter(django_filters.FilterSet):
|
||||||
"""
|
"""
|
||||||
Not using DeviceComponentFilterSet for Interfaces because we need to glean the ordering logic from the parent
|
|
||||||
Device's DeviceType.
|
|
||||||
"""
|
"""
|
||||||
device = django_filters.CharFilter(
|
device = django_filters.CharFilter(
|
||||||
method='filter_device',
|
method='filter_device',
|
||||||
@ -536,6 +535,16 @@ class InterfaceFilter(django_filters.FilterSet):
|
|||||||
method='filter_type',
|
method='filter_type',
|
||||||
label='Interface type',
|
label='Interface type',
|
||||||
)
|
)
|
||||||
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
queryset=Site.objects.all(),
|
||||||
|
label='Site (ID)',
|
||||||
|
)
|
||||||
|
site = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
name='site__slug',
|
||||||
|
queryset=Site.objects.all(),
|
||||||
|
to_field_name='slug',
|
||||||
|
label='Site name (slug)',
|
||||||
|
)
|
||||||
lag_id = django_filters.ModelMultipleChoiceFilter(
|
lag_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
name='lag',
|
name='lag',
|
||||||
queryset=Interface.objects.all(),
|
queryset=Interface.objects.all(),
|
||||||
@ -578,11 +587,20 @@ class InterfaceFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
|
|
||||||
class InterfaceListFilter(django_filters.FilterSet):
|
class InterfaceListFilter(django_filters.FilterSet):
|
||||||
|
q = django_filters.CharFilter(
|
||||||
|
method='search',
|
||||||
|
label='Search',
|
||||||
|
)
|
||||||
device_id = django_filters.NumberFilter(
|
device_id = django_filters.NumberFilter(
|
||||||
method='filter_device',
|
method='filter_device',
|
||||||
name='pk',
|
name='pk',
|
||||||
label='Device (ID)',
|
label='Device (ID)',
|
||||||
)
|
)
|
||||||
|
device = django_filters.CharFilter(
|
||||||
|
method='filter_device',
|
||||||
|
name='name',
|
||||||
|
label='Device',
|
||||||
|
)
|
||||||
type = django_filters.CharFilter(
|
type = django_filters.CharFilter(
|
||||||
method='filter_type',
|
method='filter_type',
|
||||||
label='Interface type',
|
label='Interface type',
|
||||||
@ -623,10 +641,21 @@ class InterfaceListFilter(django_filters.FilterSet):
|
|||||||
if not value:
|
if not value:
|
||||||
return queryset
|
return queryset
|
||||||
try:
|
try:
|
||||||
return queryset.filter(mac_address=value)
|
return queryset.filter(interfaces__mac_address=value).distinct()
|
||||||
except AddrFormatError:
|
except AddrFormatError:
|
||||||
return queryset.none()
|
return queryset.none()
|
||||||
|
|
||||||
|
def search(self, queryset, name, value):
|
||||||
|
if not value.strip():
|
||||||
|
return queryset
|
||||||
|
return queryset.filter(
|
||||||
|
Q(name__icontains=value) |
|
||||||
|
Q(serial__icontains=value.strip()) |
|
||||||
|
Q(inventory_items__serial__icontains=value.strip()) |
|
||||||
|
Q(asset_tag=value.strip()) |
|
||||||
|
Q(comments__icontains=value)
|
||||||
|
).distinct()
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayFilter(DeviceComponentFilterSet):
|
class DeviceBayFilter(DeviceComponentFilterSet):
|
||||||
|
|
||||||
|
@ -1618,7 +1618,12 @@ class InterfaceFilterForm(BootstrapMixin, forms.Form):
|
|||||||
|
|
||||||
|
|
||||||
class InterfaceListFilterForm(BootstrapMixin, forms.Form):
|
class InterfaceListFilterForm(BootstrapMixin, forms.Form):
|
||||||
site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug')
|
model = Interface
|
||||||
|
q = forms.CharField(required=False, label='Search')
|
||||||
|
site = FilterChoiceField(
|
||||||
|
queryset=Site.objects.annotate(filter_count=Count('devices')),
|
||||||
|
to_field_name='slug',
|
||||||
|
)
|
||||||
#device = forms.ModelChoiceField(required=False, queryset=Device.objects.all(), to_field_name='slug')
|
#device = forms.ModelChoiceField(required=False, queryset=Device.objects.all(), to_field_name='slug')
|
||||||
device = forms.CharField(required=False, label='Device name')
|
device = forms.CharField(required=False, label='Device name')
|
||||||
enabled = forms.ChoiceField(choices=add_blank_choice(IFACE_ENABLED_CHOICES), required=False)
|
enabled = forms.ChoiceField(choices=add_blank_choice(IFACE_ENABLED_CHOICES), required=False)
|
||||||
|
Loading…
Reference in New Issue
Block a user