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
77def92c25
commit
e4f0611f78
@ -1,6 +1,7 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
from dcim.models import Platform
|
from dcim.models import Platform
|
||||||
from extras.api.serializers_.configtemplates import ConfigTemplateSerializer
|
from extras.api.serializers_.configtemplates import ConfigTemplateSerializer
|
||||||
from netbox.api.fields import RelatedObjectCountField
|
|
||||||
from netbox.api.serializers import NestedGroupModelSerializer
|
from netbox.api.serializers import NestedGroupModelSerializer
|
||||||
from .manufacturers import ManufacturerSerializer
|
from .manufacturers import ManufacturerSerializer
|
||||||
from .nested import NestedPlatformSerializer
|
from .nested import NestedPlatformSerializer
|
||||||
@ -16,8 +17,8 @@ class PlatformSerializer(NestedGroupModelSerializer):
|
|||||||
config_template = ConfigTemplateSerializer(nested=True, required=False, allow_null=True, default=None)
|
config_template = ConfigTemplateSerializer(nested=True, required=False, allow_null=True, default=None)
|
||||||
|
|
||||||
# Related object counts
|
# Related object counts
|
||||||
device_count = RelatedObjectCountField('devices')
|
device_count = serializers.IntegerField(read_only=True, default=0)
|
||||||
virtualmachine_count = RelatedObjectCountField('virtual_machines')
|
virtualmachine_count = serializers.IntegerField(read_only=True, default=0)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Platform
|
model = Platform
|
||||||
|
@ -20,6 +20,7 @@ from netbox.api.viewsets import NetBoxModelViewSet, MPTTLockedMixin
|
|||||||
from netbox.api.viewsets.mixins import SequentialBulkCreatesMixin
|
from netbox.api.viewsets.mixins import SequentialBulkCreatesMixin
|
||||||
from utilities.api import get_serializer_for_model
|
from utilities.api import get_serializer_for_model
|
||||||
from utilities.query_functions import CollateAsChar
|
from utilities.query_functions import CollateAsChar
|
||||||
|
from virtualization.models import VirtualMachine
|
||||||
from . import serializers
|
from . import serializers
|
||||||
from .exceptions import MissingFilterException
|
from .exceptions import MissingFilterException
|
||||||
|
|
||||||
@ -360,8 +361,20 @@ class DeviceRoleViewSet(NetBoxModelViewSet):
|
|||||||
# Platforms
|
# Platforms
|
||||||
#
|
#
|
||||||
|
|
||||||
class PlatformViewSet(NetBoxModelViewSet):
|
class PlatformViewSet(MPTTLockedMixin, NetBoxModelViewSet):
|
||||||
queryset = Platform.objects.all()
|
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
|
serializer_class = serializers.PlatformSerializer
|
||||||
filterset_class = filtersets.PlatformFilterSet
|
filterset_class = filtersets.PlatformFilterSet
|
||||||
|
|
||||||
|
@ -2109,9 +2109,18 @@ class DeviceRoleBulkDeleteView(generic.BulkDeleteView):
|
|||||||
|
|
||||||
@register_model_view(Platform, 'list', path='', detail=False)
|
@register_model_view(Platform, 'list', path='', detail=False)
|
||||||
class PlatformListView(generic.ObjectListView):
|
class PlatformListView(generic.ObjectListView):
|
||||||
queryset = Platform.objects.annotate(
|
queryset = Platform.objects.add_related_count(
|
||||||
device_count=count_related(Device, 'platform'),
|
Platform.objects.add_related_count(
|
||||||
vm_count=count_related(VirtualMachine, 'platform')
|
Platform.objects.all(),
|
||||||
|
VirtualMachine,
|
||||||
|
'platform',
|
||||||
|
'vm_count',
|
||||||
|
cumulative=True
|
||||||
|
),
|
||||||
|
Device,
|
||||||
|
'platform',
|
||||||
|
'device_count',
|
||||||
|
cumulative=True
|
||||||
)
|
)
|
||||||
table = tables.PlatformTable
|
table = tables.PlatformTable
|
||||||
filterset = filtersets.PlatformFilterSet
|
filterset = filtersets.PlatformFilterSet
|
||||||
|
Loading…
Reference in New Issue
Block a user