1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #5935: Fix filtering prefixes list by multiple prefix values

This commit is contained in:
Jeremy Stretch
2021-03-08 16:27:12 -05:00
parent 16a3d1339a
commit 61e5eff666
3 changed files with 14 additions and 8 deletions

View File

@ -13,6 +13,7 @@
* [#5703](https://github.com/netbox-community/netbox/issues/5703) - Fix VRF and Tenant field population when adding IP addresses from prefix * [#5703](https://github.com/netbox-community/netbox/issues/5703) - Fix VRF and Tenant field population when adding IP addresses from prefix
* [#5819](https://github.com/netbox-community/netbox/issues/5819) - Enable ordering of virtual machines by primary IP address * [#5819](https://github.com/netbox-community/netbox/issues/5819) - Enable ordering of virtual machines by primary IP address
* [#5872](https://github.com/netbox-community/netbox/issues/5872) - Ordering of devices by primary IP should respect PREFER_IPV4 configuration parameter * [#5872](https://github.com/netbox-community/netbox/issues/5872) - Ordering of devices by primary IP should respect PREFER_IPV4 configuration parameter
* [#5935](https://github.com/netbox-community/netbox/issues/5935) - Fix filtering prefixes list by multiple prefix values
## v2.10.5 (2021-02-24) ## v2.10.5 (2021-02-24)

View File

@ -192,7 +192,7 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet
field_name='prefix', field_name='prefix',
lookup_expr='family' lookup_expr='family'
) )
prefix = django_filters.CharFilter( prefix = MultiValueCharFilter(
method='filter_prefix', method='filter_prefix',
label='Prefix', label='Prefix',
) )
@ -304,13 +304,13 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
def filter_prefix(self, queryset, name, value): def filter_prefix(self, queryset, name, value):
if not value.strip(): query_values = []
return queryset for v in value:
try: try:
query = str(netaddr.IPNetwork(value).cidr) query_values.append(netaddr.IPNetwork(v))
return queryset.filter(prefix=query)
except (AddrFormatError, ValueError): except (AddrFormatError, ValueError):
return queryset.none() pass
return queryset.filter(prefix__in=query_values)
def search_within(self, queryset, name, value): def search_within(self, queryset, name, value):
value = value.strip() value = value.strip()

View File

@ -422,6 +422,11 @@ class PrefixTestCase(TestCase):
params = {'family': '6'} params = {'family': '6'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
def test_prefix(self):
prefixes = Prefix.objects.all()[:2]
params = {'prefix': [prefixes[0].prefix, prefixes[1].prefix]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_is_pool(self): def test_is_pool(self):
params = {'is_pool': 'true'} params = {'is_pool': 'true'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)