1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Clean up related objects for sites, tenants

This commit is contained in:
jeremystretch
2023-01-25 12:26:38 -05:00
committed by jeremystretch
parent 48d6d7279d
commit 0c9e7aa074
5 changed files with 99 additions and 294 deletions

View File

@@ -335,19 +335,25 @@ class SiteView(generic.ObjectView):
queryset = Site.objects.prefetch_related('tenant__group')
def get_extra_context(self, request, instance):
stats = {
'location_count': Location.objects.restrict(request.user, 'view').filter(site=instance).count(),
'rack_count': Rack.objects.restrict(request.user, 'view').filter(site=instance).count(),
'device_count': Device.objects.restrict(request.user, 'view').filter(site=instance).count(),
'prefix_count': Prefix.objects.restrict(request.user, 'view').filter(site=instance).count(),
'vlangroup_count': VLANGroup.objects.restrict(request.user, 'view').filter(
related_models = [
# DCIM
Location.objects.restrict(request.user, 'view').filter(site=instance),
Rack.objects.restrict(request.user, 'view').filter(site=instance),
Device.objects.restrict(request.user, 'view').filter(site=instance),
# Virtualization
VirtualMachine.objects.restrict(request.user, 'view').filter(cluster__site=instance),
# IPAM
Prefix.objects.restrict(request.user, 'view').filter(site=instance),
ASN.objects.restrict(request.user, 'view').filter(sites=instance),
VLANGroup.objects.restrict(request.user, 'view').filter(
scope_type=ContentType.objects.get_for_model(Site),
scope_id=instance.pk
).count(),
'vlan_count': VLAN.objects.restrict(request.user, 'view').filter(site=instance).count(),
'circuit_count': Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct().count(),
'vm_count': VirtualMachine.objects.restrict(request.user, 'view').filter(cluster__site=instance).count(),
}
),
VLAN.objects.restrict(request.user, 'view').filter(site=instance),
# Circuits
Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct(),
]
locations = Location.objects.add_related_count(
Location.objects.all(),
Rack,
@@ -369,15 +375,9 @@ class SiteView(generic.ObjectView):
parent_bay__isnull=True
).prefetch_related('device_type__manufacturer', 'parent_bay', 'device_role')
asns = ASN.objects.restrict(request.user, 'view').filter(sites=instance)
asn_count = asns.count()
stats.update({'asn_count': asn_count})
return {
'stats': stats,
'related_models': related_models,
'locations': locations,
'asns': asns,
'nonracked_devices': nonracked_devices.order_by('-pk')[:10],
'total_nonracked_devices_count': nonracked_devices.count(),
}