From c3d9910e082f5878a9312c0ee18cadd5b7f8a671 Mon Sep 17 00:00:00 2001 From: Jason Yates Date: Thu, 7 Apr 2022 08:21:13 +0100 Subject: [PATCH 1/3] Limit amount of nonracked devices displayed Fixes #8920 Limits the amount of non-racked devices on Site and Location view to 10 and provides a link to the device list this is pre-filtered to the relevant site or location. --- netbox/dcim/views.py | 18 ++++- .../templates/dcim/inc/nonracked_devices.html | 68 +++++++++++-------- 2 files changed, 57 insertions(+), 29 deletions(-) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index c0b46f16e..9b24ea9d1 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -346,7 +346,13 @@ class SiteView(generic.ObjectView): site=instance, position__isnull=True, parent_bay__isnull=True - ).prefetch_related('device_type__manufacturer') + ).prefetch_related('device_type__manufacturer').order_by('-pk')[:10] + + total_nonracked_devices_count = Device.objects.filter( + site=instance, + position__isnull=True, + parent_bay__isnull=True + ).count() asns = ASN.objects.restrict(request.user, 'view').filter(sites=instance) asn_count = asns.count() @@ -358,6 +364,7 @@ class SiteView(generic.ObjectView): 'locations': locations, 'asns': asns, 'nonracked_devices': nonracked_devices, + 'total_nonracked_devices_count': total_nonracked_devices_count, } @@ -439,13 +446,20 @@ class LocationView(generic.ObjectView): location=instance, position__isnull=True, parent_bay__isnull=True - ).prefetch_related('device_type__manufacturer') + ).prefetch_related('device_type__manufacturer').order_by('-pk')[:10] + + total_nonracked_devices_count = Device.objects.filter( + location=instance, + position__isnull=True, + parent_bay__isnull=True + ).count() return { 'rack_count': rack_count, 'device_count': device_count, 'child_locations_table': child_locations_table, 'nonracked_devices': nonracked_devices, + 'total_nonracked_devices_count': total_nonracked_devices_count, } diff --git a/netbox/templates/dcim/inc/nonracked_devices.html b/netbox/templates/dcim/inc/nonracked_devices.html index 7f4da2f24..68112e2a7 100644 --- a/netbox/templates/dcim/inc/nonracked_devices.html +++ b/netbox/templates/dcim/inc/nonracked_devices.html @@ -1,40 +1,54 @@ {% load helpers %}
-
- Non-Racked Devices -
-
-{% if nonracked_devices %} - - - - - - - - {% for device in nonracked_devices %} - - - - - {% if device.parent_bay %} - - - {% else %} - +
+ Non-Racked Devices +
+
+ {% if nonracked_devices %} +
NameRoleTypeParent Device
- {{ device }} - {{ device.device_role }}{{ device.device_type }}{{ device.parent_bay.device|linkify }}{{ device.parent_bay }}
+ + + + + + + {% for device in nonracked_devices %} + + + + + {% if device.parent_bay %} + + + {% else %} + + {% endif %} + + {% endfor %} +
NameRoleTypeParent Device
+ {{ device }} + {{ device.device_role }}{{ device.device_type }}{{ device.parent_bay.device|linkify }}{{ device.parent_bay }}
+ + {% if nonracked_devices.count == 10 %} + {% if object|meta:'verbose_name' == 'site' %} +
+ Displaying 10 of {{ total_nonracked_devices_count }} devices (View full list) +
+ {% elif object|meta:'verbose_name' == 'location' %} +
+ Displaying 10 of {{ total_nonracked_devices_count }} devices (View full list) +
{% endif %} - - {% endfor %} - + {% endif %} + {% else %}
None
{% endif %}
+ {% if perms.dcim.add_device %} {% if object|meta:'verbose_name' == 'rack' %}