From e98dd4832cf142b5a0467967f15be0b984d1cfb8 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Fri, 25 Aug 2023 18:56:08 +0530 Subject: [PATCH] adds parent filter on iprange #13313 --- netbox/ipam/filtersets.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 9b57cb273..e02761fd6 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -467,6 +467,10 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): choices=IPRangeStatusChoices, null_value=None ) + parent = MultiValueCharFilter( + method='search_by_parent', + label=_('Parent prefix'), + ) class Meta: model = IPRange @@ -500,6 +504,18 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): return queryset.filter(**{f'{name}__net_in': value}) except ValidationError: return queryset.none() + + def search_by_parent(self, queryset, name, value): + if not value: + return queryset + q = Q() + for prefix in value: + try: + query = str(netaddr.IPNetwork(prefix.strip()).cidr) + q |= Q(start_address__net_host_contained=query) + except (AddrFormatError, ValueError): + return queryset.none() + return queryset.filter(q) class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):