diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 80cf1da2e..bc9181286 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -512,7 +512,7 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): for prefix in value: try: query = str(netaddr.IPNetwork(prefix.strip()).cidr) - q |= Q(start_address__net_host_contained=query) + q |= Q(start_address__net_host_contained=query, end_address__net_host_contained=query) except (AddrFormatError, ValueError): return queryset.none() return queryset.filter(q) diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index b25c4230b..0aa78e622 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -740,8 +740,6 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests): ) Tenant.objects.bulk_create(tenants) - Prefix.objects.create(prefix='10.0.1.0/24') - ip_ranges = ( IPRange(start_address='10.0.1.100/24', end_address='10.0.1.199/24', size=100, vrf=None, tenant=None, role=None, status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar1'), IPRange(start_address='10.0.2.100/24', end_address='10.0.2.199/24', size=100, vrf=vrfs[0], tenant=tenants[0], role=roles[0], status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar2'), @@ -809,9 +807,10 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_parent(self): - prefix = Prefix.objects.get(prefix='10.0.1.0/24') - params = {'parent': [prefix.prefix]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + params = {'parent': ['10.0.1.0/24', '10.0.2.0/24']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'parent': ['10.0.1.0/25']} # Range 10.0.1.100-199 is not fully contained by 10.0.1.0/25 + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):