adds parent filter on iprange #13313

This commit is contained in:
Abhimanyu Saharan 2023-08-25 18:56:08 +05:30
parent ca5e69897d
commit e98dd4832c

View File

@ -467,6 +467,10 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
choices=IPRangeStatusChoices, choices=IPRangeStatusChoices,
null_value=None null_value=None
) )
parent = MultiValueCharFilter(
method='search_by_parent',
label=_('Parent prefix'),
)
class Meta: class Meta:
model = IPRange model = IPRange
@ -500,6 +504,18 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
return queryset.filter(**{f'{name}__net_in': value}) return queryset.filter(**{f'{name}__net_in': value})
except ValidationError: except ValidationError:
return queryset.none() 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): class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):