Add vlangroup into LocationTable, LocationListView queryset and related_models in LocationView

This commit is contained in:
Renato Almeida de Oliveira Zaroubin 2025-03-04 18:34:23 +00:00
parent d208ddde9a
commit d83c2f45bc
2 changed files with 29 additions and 14 deletions

View File

@ -146,6 +146,11 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
url_params={'location_id': 'pk'}, url_params={'location_id': 'pk'},
verbose_name=_('Devices') verbose_name=_('Devices')
) )
vlangroup_count = columns.LinkedCountColumn(
viewname='ipam:vlangroup_list',
url_params={'location': 'pk'},
verbose_name=_('VLAN Groups')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:location_list' url_name='dcim:location_list'
) )
@ -157,8 +162,9 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
model = Location model = Location
fields = ( fields = (
'pk', 'id', 'name', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count', 'device_count', 'pk', 'id', 'name', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count', 'device_count',
'description', 'slug', 'contacts', 'tags', 'actions', 'created', 'last_updated', 'description', 'slug', 'contacts', 'tags', 'actions', 'created', 'last_updated', 'vlangroup_count',
) )
default_columns = ( default_columns = (
'pk', 'name', 'site', 'status', 'facility', 'tenant', 'rack_count', 'device_count', 'description' 'pk', 'name', 'site', 'status', 'facility', 'tenant', 'rack_count', 'device_count', 'vlangroup_count',
'description'
) )

View File

@ -505,6 +505,7 @@ class SiteContactsView(ObjectContactsView):
@register_model_view(Location, 'list', path='', detail=False) @register_model_view(Location, 'list', path='', detail=False)
class LocationListView(generic.ObjectListView): class LocationListView(generic.ObjectListView):
queryset = Location.objects.add_related_count( queryset = Location.objects.add_related_count(
Location.objects.add_related_count(
Location.objects.add_related_count( Location.objects.add_related_count(
Location.objects.all(), Location.objects.all(),
Device, Device,
@ -516,6 +517,11 @@ class LocationListView(generic.ObjectListView):
'location', 'location',
'rack_count', 'rack_count',
cumulative=True cumulative=True
),
VLANGroup,
'location',
'vlangroup_count',
cumulative=True
) )
filterset = filtersets.LocationFilterSet filterset = filtersets.LocationFilterSet
filterset_form = forms.LocationFilterForm filterset_form = forms.LocationFilterForm
@ -528,6 +534,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
def get_extra_context(self, request, instance): def get_extra_context(self, request, instance):
locations = instance.get_descendants(include_self=True) locations = instance.get_descendants(include_self=True)
location_content_type = ContentType.objects.get_for_model(instance)
return { return {
'related_models': self.get_related_models( 'related_models': self.get_related_models(
request, request,
@ -545,6 +552,8 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
(Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
(Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
(WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
(VLANGroup.objects.restrict(request.user, 'view').filter(
scope_type_id=location_content_type.id, scope_id=instance.id), 'location'),
), ),
), ),
} }