|
|
@@ -755,19 +755,9 @@ class IPAddressView(generic.ObjectView):
|
|
|
# Limit to a maximum of 10 duplicates displayed here
|
|
|
duplicate_ips_table = tables.IPAddressTable(duplicate_ips[:10], orderable=False)
|
|
|
|
|
|
- # Related IP table
|
|
|
- related_ips = IPAddress.objects.restrict(request.user, 'view').exclude(
|
|
|
- address=str(instance.address)
|
|
|
- ).filter(
|
|
|
- vrf=instance.vrf, address__net_contained_or_equal=str(instance.address)
|
|
|
- )
|
|
|
- related_ips_table = tables.IPAddressTable(related_ips, orderable=False)
|
|
|
- related_ips_table.configure(request)
|
|
|
-
|
|
|
return {
|
|
|
'parent_prefixes_table': parent_prefixes_table,
|
|
|
'duplicate_ips_table': duplicate_ips_table,
|
|
|
- 'related_ips_table': related_ips_table,
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -872,6 +862,24 @@ class IPAddressBulkDeleteView(generic.BulkDeleteView):
|
|
|
table = tables.IPAddressTable
|
|
|
|
|
|
|
|
|
+@register_model_view(IPAddress, 'related_ips', path='related-ip-addresses')
|
|
|
+class IPAddressRelatedIPsView(generic.ObjectChildrenView):
|
|
|
+ queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
|
|
|
+ child_model = IPAddress
|
|
|
+ table = tables.IPAddressTable
|
|
|
+ filterset = filtersets.IPAddressFilterSet
|
|
|
+ template_name = 'ipam/ipaddress/ip_addresses.html'
|
|
|
+ tab = ViewTab(
|
|
|
+ label=_('Related IPs'),
|
|
|
+ badge=lambda x: x.get_related_ips().count(),
|
|
|
+ weight=500,
|
|
|
+ hide_if_empty=True,
|
|
|
+ )
|
|
|
+
|
|
|
+ def get_children(self, request, parent):
|
|
|
+ return parent.get_related_ips().restrict(request.user, 'view')
|
|
|
+
|
|
|
+
|
|
|
#
|
|
|
# VLAN groups
|
|
|
#
|