From 4316c245184c4ad41c3d424a284407cbef66bbbb Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 6 Apr 2021 09:42:36 -0400 Subject: [PATCH] Include child regions, site groups --- netbox/dcim/tables/sites.py | 12 +++++++++--- netbox/dcim/views.py | 26 ++++++++++++++++++++++++-- netbox/templates/dcim/region.html | 15 ++++++++++++++- netbox/templates/dcim/sitegroup.html | 21 +++++++++++++++++---- 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/netbox/dcim/tables/sites.py b/netbox/dcim/tables/sites.py index 2cee436d7..288fa5753 100644 --- a/netbox/dcim/tables/sites.py +++ b/netbox/dcim/tables/sites.py @@ -2,7 +2,9 @@ import django_tables2 as tables from dcim.models import Region, Site, SiteGroup from tenancy.tables import TenantColumn -from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, MPTTColumn, TagColumn, ToggleColumn +from utilities.tables import ( + BaseTable, ButtonsColumn, ChoiceFieldColumn, LinkedCountColumn, MPTTColumn, TagColumn, ToggleColumn, +) __all__ = ( 'RegionTable', @@ -20,7 +22,9 @@ class RegionTable(BaseTable): name = MPTTColumn( linkify=True ) - site_count = tables.Column( + site_count = LinkedCountColumn( + viewname='dcim:site_list', + url_params={'region_id': 'pk'}, verbose_name='Sites' ) actions = ButtonsColumn(Region) @@ -40,7 +44,9 @@ class SiteGroupTable(BaseTable): name = MPTTColumn( linkify=True ) - site_count = tables.Column( + site_count = LinkedCountColumn( + viewname='dcim:site_list', + url_params={'group_id': 'pk'}, verbose_name='Sites' ) actions = ButtonsColumn(SiteGroup) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index bdfa5129d..d892c0823 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -116,15 +116,26 @@ class RegionView(generic.ObjectView): queryset = Region.objects.all() def get_extra_context(self, request, instance): + child_regions = Region.objects.add_related_count( + Region.objects.all(), + Site, + 'region', + 'site_count', + cumulative=True + ).restrict(request.user, 'view').filter( + parent__in=instance.get_descendants(include_self=True) + ) + child_regions_table = tables.RegionTable(child_regions) + sites = Site.objects.restrict(request.user, 'view').filter( region=instance ) - sites_table = tables.SiteTable(sites) sites_table.columns.hide('region') paginate_table(sites_table, request) return { + 'child_regions_table': child_regions_table, 'sites_table': sites_table, } @@ -190,15 +201,26 @@ class SiteGroupView(generic.ObjectView): queryset = SiteGroup.objects.all() def get_extra_context(self, request, instance): + child_groups = SiteGroup.objects.add_related_count( + SiteGroup.objects.all(), + Site, + 'group', + 'site_count', + cumulative=True + ).restrict(request.user, 'view').filter( + parent__in=instance.get_descendants(include_self=True) + ) + child_groups_table = tables.SiteGroupTable(child_groups) + sites = Site.objects.restrict(request.user, 'view').filter( group=instance ) - sites_table = tables.SiteTable(sites) sites_table.columns.hide('group') paginate_table(sites_table, request) return { + 'child_groups_table': child_groups_table, 'sites_table': sites_table, } diff --git a/netbox/templates/dcim/region.html b/netbox/templates/dcim/region.html index c79336962..1e2d395dd 100644 --- a/netbox/templates/dcim/region.html +++ b/netbox/templates/dcim/region.html @@ -44,10 +44,23 @@ + {% include 'inc/custom_fields_panel.html' %} {% plugin_left_page object %}
- {% include 'inc/custom_fields_panel.html' %} +
+
+ Child Regions +
+ {% include 'inc/table.html' with table=child_regions_table %} + {% if perms.dcim.add_region %} + + {% endif %} +
{% plugin_right_page object %}
diff --git a/netbox/templates/dcim/sitegroup.html b/netbox/templates/dcim/sitegroup.html index 95cba7aeb..2de17c025 100644 --- a/netbox/templates/dcim/sitegroup.html +++ b/netbox/templates/dcim/sitegroup.html @@ -44,10 +44,23 @@ + {% include 'inc/custom_fields_panel.html' %} {% plugin_left_page object %}
- {% include 'inc/custom_fields_panel.html' %} +
+
+ Child Groups +
+ {% include 'inc/table.html' with table=child_groups_table %} + {% if perms.dcim.add_sitegroup %} + + {% endif %} +
{% plugin_right_page object %}
@@ -65,9 +78,9 @@ {% endif %} - - {% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %} - {% plugin_full_width_page object %} + + {% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %} + {% plugin_full_width_page object %} {% endblock %}