diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 71df90bb7..d618c8eab 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -536,6 +536,10 @@ class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class VLANGroupFilterSet(OrganizationalModelFilterSet): + q = django_filters.CharFilter( + method='search', + label='Search', + ) scope_type = ContentTypeFilter() region = django_filters.NumberFilter( method='filter_scope' @@ -563,6 +567,15 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet): model = VLANGroup fields = ['id', 'name', 'slug', 'description', 'scope_id'] + def search(self, queryset, name, value): + if not value.strip(): + return queryset + qs_filter = ( + Q(name__icontains=value) | + Q(description__icontains=value) + ) + return queryset.filter(qs_filter) + def filter_scope(self, queryset, name, value): return queryset.filter( scope_type=ContentType.objects.get(model=name), diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 6a3753859..1b38b63f4 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -1270,6 +1270,10 @@ class VLANGroupBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class VLANGroupFilterForm(BootstrapMixin, forms.Form): + q = forms.CharField( + required=False, + label=_('Search') + ) region = DynamicModelMultipleChoiceField( queryset=Region.objects.all(), required=False,