Include child regions, site groups

This commit is contained in:
jeremystretch 2021-04-06 09:42:36 -04:00
parent e543b305c3
commit 838200219f
4 changed files with 64 additions and 10 deletions

View File

@ -2,7 +2,9 @@ import django_tables2 as tables
from dcim.models import Region, Site, SiteGroup from dcim.models import Region, Site, SiteGroup
from tenancy.tables import TenantColumn 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__ = ( __all__ = (
'RegionTable', 'RegionTable',
@ -20,7 +22,9 @@ class RegionTable(BaseTable):
name = MPTTColumn( name = MPTTColumn(
linkify=True linkify=True
) )
site_count = tables.Column( site_count = LinkedCountColumn(
viewname='dcim:site_list',
url_params={'region_id': 'pk'},
verbose_name='Sites' verbose_name='Sites'
) )
actions = ButtonsColumn(Region) actions = ButtonsColumn(Region)
@ -40,7 +44,9 @@ class SiteGroupTable(BaseTable):
name = MPTTColumn( name = MPTTColumn(
linkify=True linkify=True
) )
site_count = tables.Column( site_count = LinkedCountColumn(
viewname='dcim:site_list',
url_params={'group_id': 'pk'},
verbose_name='Sites' verbose_name='Sites'
) )
actions = ButtonsColumn(SiteGroup) actions = ButtonsColumn(SiteGroup)

View File

@ -116,15 +116,26 @@ class RegionView(generic.ObjectView):
queryset = Region.objects.all() queryset = Region.objects.all()
def get_extra_context(self, request, instance): 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( sites = Site.objects.restrict(request.user, 'view').filter(
region=instance region=instance
) )
sites_table = tables.SiteTable(sites) sites_table = tables.SiteTable(sites)
sites_table.columns.hide('region') sites_table.columns.hide('region')
paginate_table(sites_table, request) paginate_table(sites_table, request)
return { return {
'child_regions_table': child_regions_table,
'sites_table': sites_table, 'sites_table': sites_table,
} }
@ -190,15 +201,26 @@ class SiteGroupView(generic.ObjectView):
queryset = SiteGroup.objects.all() queryset = SiteGroup.objects.all()
def get_extra_context(self, request, instance): 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( sites = Site.objects.restrict(request.user, 'view').filter(
group=instance group=instance
) )
sites_table = tables.SiteTable(sites) sites_table = tables.SiteTable(sites)
sites_table.columns.hide('group') sites_table.columns.hide('group')
paginate_table(sites_table, request) paginate_table(sites_table, request)
return { return {
'child_groups_table': child_groups_table,
'sites_table': sites_table, 'sites_table': sites_table,
} }

View File

@ -44,10 +44,23 @@
</tr> </tr>
</table> </table>
</div> </div>
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %} {% plugin_left_page object %}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{% include 'inc/custom_fields_panel.html' %} <div class="panel panel-default">
<div class="panel-heading">
<strong>Child Regions</strong>
</div>
{% include 'inc/table.html' with table=child_regions_table %}
{% if perms.dcim.add_region %}
<div class="panel-footer text-right noprint">
<a href="{% url 'dcim:region_add' %}?parent={{ object.pk }}" class="btn btn-xs btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add region
</a>
</div>
{% endif %}
</div>
{% plugin_right_page object %} {% plugin_right_page object %}
</div> </div>
</div> </div>

View File

@ -44,10 +44,23 @@
</tr> </tr>
</table> </table>
</div> </div>
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %} {% plugin_left_page object %}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{% include 'inc/custom_fields_panel.html' %} <div class="panel panel-default">
<div class="panel-heading">
<strong>Child Groups</strong>
</div>
{% include 'inc/table.html' with table=child_groups_table %}
{% if perms.dcim.add_sitegroup %}
<div class="panel-footer text-right noprint">
<a href="{% url 'dcim:sitegroup_add' %}?parent={{ object.pk }}" class="btn btn-xs btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add site group
</a>
</div>
{% endif %}
</div>
{% plugin_right_page object %} {% plugin_right_page object %}
</div> </div>
</div> </div>
@ -65,9 +78,9 @@
</a> </a>
</div> </div>
{% endif %} {% endif %}
</div> </div>
{% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %} {% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %}
{% plugin_full_width_page object %} {% plugin_full_width_page object %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}