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:
@ -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)
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user