From 982b9454f8e26173869caa5c29e3b14734dc2679 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 29 Jun 2018 13:54:21 -0400 Subject: [PATCH] Closes #2194: Added 'address' filter to IPAddress model --- netbox/ipam/filters.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 005d44a84..f21cc299d 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import django_filters +from django.core.exceptions import ValidationError from django.db.models import Q import netaddr from netaddr.core import AddrFormatError @@ -233,6 +234,10 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): method='search_by_parent', label='Parent prefix', ) + address = django_filters.CharFilter( + method='filter_address', + label='Address', + ) mask_length = django_filters.NumberFilter( method='filter_mask_length', label='Mask length', @@ -313,6 +318,17 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): except (AddrFormatError, ValueError): return queryset.none() + def filter_address(self, queryset, name, value): + if not value.strip(): + return queryset + try: + # Match address and subnet mask + if '/' in value: + return queryset.filter(address=value) + return queryset.filter(address__net_host=value) + except ValidationError: + return queryset.none() + def filter_mask_length(self, queryset, name, value): if not value: return queryset