diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 01957ccbb..40b18e33a 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals from copy import deepcopy +from difflib import SequenceMatcher import re from natsort import natsorted from operator import attrgetter @@ -776,20 +777,14 @@ class DeviceView(View): services = Service.objects.filter(device=device) secrets = device.secrets.all() - # Find any related devices for convenient linking in the UI - related_devices = [] - if device.name: - if re.match('.+[0-9]+$', device.name): - # Strip 1 or more trailing digits (e.g. core-switch1) - base_name = re.match('(.*?)[0-9]+$', device.name).group(1) - elif re.match('.+\d[a-z]$', device.name.lower()): - # Strip a trailing letter if preceded by a digit (e.g. dist-switch3a -> dist-switch3) - base_name = re.match('(.*\d+)[a-z]$', device.name.lower()).group(1) - else: - base_name = None - if base_name: - related_devices = Device.objects.filter(name__istartswith=base_name).exclude(pk=device.pk)\ - .select_related('rack', 'device_type__manufacturer')[:10] + # Find up to ten devices in the same site with the same functional role for quick reference. + related_devices = Device.objects.filter( + site=device.site, device_role=device.device_role + ).exclude( + pk=device.pk + ).select_related( + 'rack', 'device_type__manufacturer' + )[:10] # Show graph button on interfaces only if at least one graph has been created. show_graphs = Graph.objects.filter(type=GRAPH_TYPE_INTERFACE).exists()