add exact address match query to IPAddressFilter

This commit is contained in:
Marek Isalski 2018-06-25 15:58:05 +02:00 committed by GitHub
parent 6dde0f030a
commit 111df916ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -229,6 +229,10 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
method='search', method='search',
label='Search', label='Search',
) )
address = django_filters.CharFilter(
method='search_by_address',
label='Exact address match',
)
parent = django_filters.CharFilter( parent = django_filters.CharFilter(
method='search_by_parent', method='search_by_parent',
label='Parent prefix', label='Parent prefix',
@ -303,6 +307,16 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
) )
return queryset.filter(qs_filter) 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): def search_by_parent(self, queryset, name, value):
value = value.strip() value = value.strip()
if not value: if not value: