@@ -755,19 +755,9 @@ def get_extra_context(self, request, instance):
755755 # Limit to a maximum of 10 duplicates displayed here
756756 duplicate_ips_table = tables .IPAddressTable (duplicate_ips [:10 ], orderable = False )
757757
758- # Related IP table
759- related_ips = IPAddress .objects .restrict (request .user , 'view' ).exclude (
760- address = str (instance .address )
761- ).filter (
762- vrf = instance .vrf , address__net_contained_or_equal = str (instance .address )
763- )
764- related_ips_table = tables .IPAddressTable (related_ips , orderable = False )
765- related_ips_table .configure (request )
766-
767758 return {
768759 'parent_prefixes_table' : parent_prefixes_table ,
769760 'duplicate_ips_table' : duplicate_ips_table ,
770- 'related_ips_table' : related_ips_table ,
771761 }
772762
773763
@@ -872,6 +862,24 @@ class IPAddressBulkDeleteView(generic.BulkDeleteView):
872862 table = tables .IPAddressTable
873863
874864
865+ @register_model_view (IPAddress , 'related_ips' , path = 'related-ip-addresses' )
866+ class IPAddressRelatedIPsView (generic .ObjectChildrenView ):
867+ queryset = IPAddress .objects .prefetch_related ('vrf__tenant' , 'tenant' )
868+ child_model = IPAddress
869+ table = tables .IPAddressTable
870+ filterset = filtersets .IPAddressFilterSet
871+ template_name = 'ipam/ipaddress/ip_addresses.html'
872+ tab = ViewTab (
873+ label = _ ('Related IPs' ),
874+ badge = lambda x : x .get_related_ips ().count (),
875+ weight = 500 ,
876+ hide_if_empty = True ,
877+ )
878+
879+ def get_children (self , request , parent ):
880+ return parent .get_related_ips ().restrict (request .user , 'view' )
881+
882+
875883#
876884# VLAN groups
877885#
0 commit comments