diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 71df90bb7f1..d618c8eab45 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -536,6 +536,10 @@ def _assigned_to_interface(self, queryset, name, value): 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 Meta: 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 6a375385902..1b38b63f4c3 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -1270,6 +1270,10 @@ class Meta: class VLANGroupFilterForm(BootstrapMixin, forms.Form): + q = forms.CharField( + required=False, + label=_('Search') + ) region = DynamicModelMultipleChoiceField( queryset=Region.objects.all(), required=False,