consolidated queryset for utilization

This commit is contained in:
Abhimanyu Saharan 2023-06-13 20:55:53 +05:30
parent 43e29c746e
commit 4ce2bec8a8
4 changed files with 22 additions and 22 deletions

View File

@ -147,10 +147,7 @@ class FHRPGroupAssignmentViewSet(NetBoxModelViewSet):
class VLANGroupViewSet(NetBoxModelViewSet): class VLANGroupViewSet(NetBoxModelViewSet):
queryset = VLANGroup.objects.annotate( queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
).prefetch_related('tags')
serializer_class = serializers.VLANGroupSerializer serializer_class = serializers.VLANGroupSerializer
filterset_class = filtersets.VLANGroupFilterSet filterset_class = filtersets.VLANGroupFilterSet

View File

@ -9,7 +9,7 @@ from django.utils.translation import gettext as _
from dcim.models import Interface from dcim.models import Interface
from ipam.choices import * from ipam.choices import *
from ipam.constants import * from ipam.constants import *
from ipam.querysets import VLANQuerySet from ipam.querysets import VLANQuerySet, VLANGroupQuerySet
from netbox.models import OrganizationalModel, PrimaryModel from netbox.models import OrganizationalModel, PrimaryModel
from virtualization.models import VMInterface from virtualization.models import VMInterface
@ -63,6 +63,8 @@ class VLANGroup(OrganizationalModel):
help_text=_('Highest permissible ID of a child VLAN') help_text=_('Highest permissible ID of a child VLAN')
) )
objects = VLANGroupQuerySet.as_manager()
class Meta: class Meta:
ordering = ('name', 'pk') # Name may be non-unique ordering = ('name', 'pk') # Name may be non-unique
constraints = ( constraints = (

View File

@ -1,8 +1,10 @@
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db.models import Q from django.db.models import F, Q
from django.db.models.expressions import RawSQL from django.db.models.expressions import RawSQL
from django.db.models.functions import Round
from utilities.querysets import RestrictedQuerySet from utilities.querysets import RestrictedQuerySet
from utilities.utils import count_related
class PrefixQuerySet(RestrictedQuerySet): class PrefixQuerySet(RestrictedQuerySet):
@ -30,6 +32,17 @@ class PrefixQuerySet(RestrictedQuerySet):
) )
class VLANGroupQuerySet(RestrictedQuerySet):
def get_utilization(self, *args, **kwargs):
from .models import VLAN
return self.annotate(
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
)
class VLANQuerySet(RestrictedQuerySet): class VLANQuerySet(RestrictedQuerySet):
def get_for_device(self, device): def get_for_device(self, device):

View File

@ -887,10 +887,7 @@ class IPAddressRelatedIPsView(generic.ObjectChildrenView):
# #
class VLANGroupListView(generic.ObjectListView): class VLANGroupListView(generic.ObjectListView):
queryset = VLANGroup.objects.annotate( queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
).prefetch_related('tags')
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
filterset_form = forms.VLANGroupFilterForm filterset_form = forms.VLANGroupFilterForm
table = tables.VLANGroupTable table = tables.VLANGroupTable
@ -898,10 +895,7 @@ class VLANGroupListView(generic.ObjectListView):
@register_model_view(VLANGroup) @register_model_view(VLANGroup)
class VLANGroupView(generic.ObjectView): class VLANGroupView(generic.ObjectView):
queryset = VLANGroup.objects.annotate( queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
).prefetch_related('tags')
def get_extra_context(self, request, instance): def get_extra_context(self, request, instance):
related_models = ( related_models = (
@ -943,20 +937,14 @@ class VLANGroupBulkImportView(generic.BulkImportView):
class VLANGroupBulkEditView(generic.BulkEditView): class VLANGroupBulkEditView(generic.BulkEditView):
queryset = VLANGroup.objects.annotate( queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
).prefetch_related('tags')
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
table = tables.VLANGroupTable table = tables.VLANGroupTable
form = forms.VLANGroupBulkEditForm form = forms.VLANGroupBulkEditForm
class VLANGroupBulkDeleteView(generic.BulkDeleteView): class VLANGroupBulkDeleteView(generic.BulkDeleteView):
queryset = VLANGroup.objects.annotate( queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
vlan_count=count_related(VLAN, 'group'),
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
).prefetch_related('tags')
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
table = tables.VLANGroupTable table = tables.VLANGroupTable