diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 005d44a84..7eb85d5da 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -229,6 +229,10 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): method='search', label='Search', ) + address = django_filters.CharFilter( + method='search_by_address', + label='Exact address match', + ) parent = django_filters.CharFilter( method='search_by_parent', label='Parent prefix', @@ -303,6 +307,16 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): ) return queryset.filter(qs_filter) + def search_by_address(self, queryset, name, value): + value = value.strip() + if not value: + return queryset + try: + query = str(netaddr.IPNetwork(value.strip()).ip) + return queryset.filter(address=query) + except (AddrFormatError, ValueError): + return queryset.none() + def search_by_parent(self, queryset, name, value): value = value.strip() if not value: