mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 05:21:55 -06:00
adds vlan child table to vlan group #13536
This commit is contained in:
parent
f743f2cfb8
commit
a75e8416a4
@ -116,6 +116,12 @@ class VLANGroup(OrganizationalModel):
|
||||
return available_vids[0]
|
||||
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):
|
||||
"""
|
||||
|
@ -897,21 +897,8 @@ class VLANGroupView(generic.ObjectView):
|
||||
(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 {
|
||||
'related_models': related_models,
|
||||
'vlans_table': vlans_table,
|
||||
}
|
||||
|
||||
|
||||
@ -944,6 +931,30 @@ class VLANGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
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
|
||||
#
|
||||
|
@ -58,15 +58,4 @@
|
||||
{% plugin_right_page object %}
|
||||
</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 %}
|
||||
|
Loading…
Reference in New Issue
Block a user