mirror of
https://github.com/netbox-community/netbox.git
synced 2025-09-06 14:23:36 -06:00
#19740: Annotate cumulative counts for platform child objects
This commit is contained in:
parent
dda4ad9bb0
commit
a6aca287e8
@ -1,6 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from dcim.models import Platform
|
||||
from extras.api.serializers_.configtemplates import ConfigTemplateSerializer
|
||||
from netbox.api.fields import RelatedObjectCountField
|
||||
from netbox.api.serializers import NestedGroupModelSerializer
|
||||
from .manufacturers import ManufacturerSerializer
|
||||
from .nested import NestedPlatformSerializer
|
||||
@ -16,8 +17,8 @@ class PlatformSerializer(NestedGroupModelSerializer):
|
||||
config_template = ConfigTemplateSerializer(nested=True, required=False, allow_null=True, default=None)
|
||||
|
||||
# Related object counts
|
||||
device_count = RelatedObjectCountField('devices')
|
||||
virtualmachine_count = RelatedObjectCountField('virtual_machines')
|
||||
device_count = serializers.IntegerField(read_only=True, default=0)
|
||||
virtualmachine_count = serializers.IntegerField(read_only=True, default=0)
|
||||
|
||||
class Meta:
|
||||
model = Platform
|
||||
|
@ -20,6 +20,7 @@ from netbox.api.viewsets import NetBoxModelViewSet, MPTTLockedMixin
|
||||
from netbox.api.viewsets.mixins import SequentialBulkCreatesMixin
|
||||
from utilities.api import get_serializer_for_model
|
||||
from utilities.query_functions import CollateAsChar
|
||||
from virtualization.models import VirtualMachine
|
||||
from . import serializers
|
||||
from .exceptions import MissingFilterException
|
||||
|
||||
@ -360,8 +361,20 @@ class DeviceRoleViewSet(NetBoxModelViewSet):
|
||||
# Platforms
|
||||
#
|
||||
|
||||
class PlatformViewSet(NetBoxModelViewSet):
|
||||
queryset = Platform.objects.all()
|
||||
class PlatformViewSet(MPTTLockedMixin, NetBoxModelViewSet):
|
||||
queryset = Platform.objects.add_related_count(
|
||||
Platform.objects.add_related_count(
|
||||
Platform.objects.all(),
|
||||
VirtualMachine,
|
||||
'platform',
|
||||
'virtualmachine_count',
|
||||
cumulative=True
|
||||
),
|
||||
Device,
|
||||
'platform',
|
||||
'device_count',
|
||||
cumulative=True
|
||||
)
|
||||
serializer_class = serializers.PlatformSerializer
|
||||
filterset_class = filtersets.PlatformFilterSet
|
||||
|
||||
|
@ -2109,9 +2109,18 @@ class DeviceRoleBulkDeleteView(generic.BulkDeleteView):
|
||||
|
||||
@register_model_view(Platform, 'list', path='', detail=False)
|
||||
class PlatformListView(generic.ObjectListView):
|
||||
queryset = Platform.objects.annotate(
|
||||
device_count=count_related(Device, 'platform'),
|
||||
vm_count=count_related(VirtualMachine, 'platform')
|
||||
queryset = Platform.objects.add_related_count(
|
||||
Platform.objects.add_related_count(
|
||||
Platform.objects.all(),
|
||||
VirtualMachine,
|
||||
'platform',
|
||||
'vm_count',
|
||||
cumulative=True
|
||||
),
|
||||
Device,
|
||||
'platform',
|
||||
'device_count',
|
||||
cumulative=True
|
||||
)
|
||||
table = tables.PlatformTable
|
||||
filterset = filtersets.PlatformFilterSet
|
||||
|
Loading…
Reference in New Issue
Block a user