Просмотр исходного кода

adds vlan child table to vlan group #13536

Abhimanyu Saharan 2 лет назад
Родитель
Сommit
a75e8416a4
3 измененных файлов с 30 добавлено и 24 удалено
  1. 6 0
      netbox/ipam/models/vlans.py
  2. 24 13
      netbox/ipam/views.py
  3. 0 11
      netbox/templates/ipam/vlangroup.html

+ 6 - 0
netbox/ipam/models/vlans.py

@@ -116,6 +116,12 @@ class VLANGroup(OrganizationalModel):
             return available_vids[0]
             return available_vids[0]
         return None
         return None
 
 
+    def get_child_vlans(self):
+        """
+        Return all VLANs within this group.
+        """
+        return VLAN.objects.filter(group=self).order_by('vid')
+
 
 
 class VLAN(PrimaryModel):
 class VLAN(PrimaryModel):
     """
     """

+ 24 - 13
netbox/ipam/views.py

@@ -897,21 +897,8 @@ class VLANGroupView(generic.ObjectView):
             (VLAN.objects.restrict(request.user, 'view').filter(group=instance), 'group_id'),
             (VLAN.objects.restrict(request.user, 'view').filter(group=instance), 'group_id'),
         )
         )
 
 
-        # TODO: Replace with embedded table
-        vlans = VLAN.objects.restrict(request.user, 'view').filter(group=instance).prefetch_related(
-            Prefetch('prefixes', queryset=Prefix.objects.restrict(request.user)),
-            'tenant', 'site', 'role',
-        ).order_by('vid')
-        vlans = add_available_vlans(vlans, vlan_group=instance)
-
-        vlans_table = tables.VLANTable(vlans, user=request.user, exclude=('group',))
-        if request.user.has_perm('ipam.change_vlan') or request.user.has_perm('ipam.delete_vlan'):
-            vlans_table.columns.show('pk')
-        vlans_table.configure(request)
-
         return {
         return {
             'related_models': related_models,
             'related_models': related_models,
-            'vlans_table': vlans_table,
         }
         }
 
 
 
 
@@ -944,6 +931,30 @@ class VLANGroupBulkDeleteView(generic.BulkDeleteView):
     table = tables.VLANGroupTable
     table = tables.VLANGroupTable
 
 
 
 
+@register_model_view(VLANGroup, 'vlans')
+class VLANGroupVLANsView(generic.ObjectChildrenView):
+    queryset = VLANGroup.objects.all()
+    child_model = VLAN
+    table = tables.VLANTable
+    filterset = filtersets.VLANFilterSet
+    template_name = 'generic/object_children.html'
+    tab = ViewTab(
+        label=_('VLANs'),
+        badge=lambda x: x.get_child_vlans().count(),
+        permission='ipam.view_vlan',
+        weight=500
+    )
+
+    def get_children(self, request, parent):
+        return parent.get_child_vlans().restrict(request.user, 'view').prefetch_related(
+            Prefetch('prefixes', queryset=Prefix.objects.restrict(request.user)),
+            'tenant', 'site', 'role',
+        )
+
+    def prep_table_data(self, request, queryset, parent):
+        return add_available_vlans(parent.get_child_vlans(), parent)
+
+
 #
 #
 # FHRP groups
 # FHRP groups
 #
 #

+ 0 - 11
netbox/templates/ipam/vlangroup.html

@@ -58,15 +58,4 @@
     {% plugin_right_page object %}
     {% plugin_right_page object %}
   </div>
   </div>
 </div>
 </div>
-<div class="row mb-3">
-	<div class="col col-md-12">
-    <div class="card">
-      <h5 class="card-header">VLANs</h5>
-      <div class="card-body table-responsive">
-        {% render_table vlans_table 'inc/table.html' %}
-        {% include 'inc/paginator.html' with paginator=vlans_table.paginator page=vlans_table.page %}
-      </div>
-    </div>
-  </div>
-</div>
 {% endblock %}
 {% endblock %}