diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 5a9a16bb1..4d16913cf 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -285,7 +285,7 @@ class Prefix(CreatedUpdatedModel, CustomFieldModel): """ Return all IPAddresses within this Prefix. """ - return IPAddress.objects.filter(address__net_contained_or_equal=str(self.prefix), vrf=self.vrf) + return IPAddress.objects.filter(address__net_host_contained=self.prefix, vrf=self.vrf) def get_available_ips(self): """ @@ -314,9 +314,7 @@ class Prefix(CreatedUpdatedModel, CustomFieldModel): child_prefixes = netaddr.IPSet([p.prefix for p in queryset]) return int(float(child_prefixes.size) / self.prefix.size * 100) else: - child_count = IPAddress.objects.filter( - address__net_contained_or_equal=str(self.prefix), vrf=self.vrf - ).count() + child_count = self.get_child_ips().count() prefix_size = self.prefix.size if self.family == 4 and self.prefix.prefixlen < 31 and not self.is_pool: prefix_size -= 2 diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 684aa4fdc..6f24a675f 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -459,9 +459,7 @@ class PrefixView(View): aggregate = None # Count child IP addresses - ipaddress_count = IPAddress.objects.filter( - vrf=prefix.vrf, address__net_host_contained=str(prefix.prefix) - ).count() + ipaddress_count = prefix.get_child_ips().count() # Parent prefixes table parent_prefixes = Prefix.objects.filter( @@ -530,9 +528,7 @@ class PrefixIPAddressesView(View): prefix = get_object_or_404(Prefix.objects.all(), pk=pk) # Find all IPAddresses belonging to this Prefix - ipaddresses = IPAddress.objects.filter( - vrf=prefix.vrf, address__net_host_contained=str(prefix.prefix) - ).select_related( + ipaddresses = prefix.get_child_ips().select_related( 'vrf', 'interface__device', 'primary_ip4_for', 'primary_ip6_for' ) ipaddresses = add_available_ipaddresses(prefix.prefix, ipaddresses, prefix.is_pool)