From 111df916ff05e4cd2bac441a8779e003b43d22f0 Mon Sep 17 00:00:00 2001 From: Marek Isalski Date: Mon, 25 Jun 2018 15:58:05 +0200 Subject: [PATCH 1/2] add exact address match query to IPAddressFilter --- netbox/ipam/filters.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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: From 5ab1be5e83af1470fe7cbc15d08149b91bfefaa1 Mon Sep 17 00:00:00 2001 From: Marek Isalski Date: Mon, 25 Jun 2018 16:40:43 +0200 Subject: [PATCH 2/2] fix ?address= filter to ignore results which specify a larger prefix --- netbox/ipam/filters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 7eb85d5da..7071b9b01 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -313,7 +313,7 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): return queryset try: query = str(netaddr.IPNetwork(value.strip()).ip) - return queryset.filter(address=query) + return queryset.filter(address__net_contains_or_equals=query, address__startswith=query + "/") except (AddrFormatError, ValueError): return queryset.none()