Sfoglia il codice sorgente

Include child regions, site groups

jeremystretch 4 anni fa
parent
commit
838200219f

+ 9 - 3
netbox/dcim/tables/sites.py

@@ -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)

+ 24 - 2
netbox/dcim/views.py

@@ -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,
         }
         }
 
 

+ 14 - 1
netbox/templates/dcim/region.html

@@ -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>

+ 17 - 4
netbox/templates/dcim/sitegroup.html

@@ -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>
-      {% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %}
-      {% plugin_full_width_page object %}
+    </div>
+    {% include 'inc/paginator.html' with paginator=sites_table.paginator page=sites_table.page %}
+    {% plugin_full_width_page object %}
   </div>
   </div>
 </div>
 </div>
 {% endblock %}
 {% endblock %}