mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-14 01:41:22 -06:00
Closes #11110: Add start_address and end_address filters for IP ranges
This commit is contained in:
parent
c36e7a1d0b
commit
c031951f4b
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
|
|
||||||
|
* [#11110](https://github.com/netbox-community/netbox/issues/11110) - Add `start_address` and `end_address` filters for IP ranges
|
||||||
* [#11592](https://github.com/netbox-community/netbox/issues/11592) - Introduce `FILE_UPLOAD_MAX_MEMORY_SIZE` configuration parameter
|
* [#11592](https://github.com/netbox-community/netbox/issues/11592) - Introduce `FILE_UPLOAD_MAX_MEMORY_SIZE` configuration parameter
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
@ -405,6 +405,14 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|||||||
field_name='start_address',
|
field_name='start_address',
|
||||||
lookup_expr='family'
|
lookup_expr='family'
|
||||||
)
|
)
|
||||||
|
start_address = MultiValueCharFilter(
|
||||||
|
method='filter_address',
|
||||||
|
label=_('Address'),
|
||||||
|
)
|
||||||
|
end_address = MultiValueCharFilter(
|
||||||
|
method='filter_address',
|
||||||
|
label=_('Address'),
|
||||||
|
)
|
||||||
contains = django_filters.CharFilter(
|
contains = django_filters.CharFilter(
|
||||||
method='search_contains',
|
method='search_contains',
|
||||||
label=_('Ranges which contain this prefix or IP'),
|
label=_('Ranges which contain this prefix or IP'),
|
||||||
@ -461,6 +469,12 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|||||||
except (AddrFormatError, ValueError):
|
except (AddrFormatError, ValueError):
|
||||||
return queryset.none()
|
return queryset.none()
|
||||||
|
|
||||||
|
def filter_address(self, queryset, name, value):
|
||||||
|
try:
|
||||||
|
return queryset.filter(**{f'{name}__net_in': value})
|
||||||
|
except ValidationError:
|
||||||
|
return queryset.none()
|
||||||
|
|
||||||
|
|
||||||
class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
||||||
family = django_filters.NumberFilter(
|
family = django_filters.NumberFilter(
|
||||||
|
@ -680,6 +680,14 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
params = {'family': '6'}
|
params = {'family': '6'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
||||||
|
|
||||||
|
def test_start_address(self):
|
||||||
|
params = {'start_address': ['10.0.1.100', '10.0.2.100']}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_end_address(self):
|
||||||
|
params = {'end_address': ['10.0.1.199', '10.0.2.199']}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_contains(self):
|
def test_contains(self):
|
||||||
params = {'contains': '10.0.1.150/24'}
|
params = {'contains': '10.0.1.150/24'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user