mirror of
https://github.com/netbox-community/netbox.git
synced 2026-04-18 23:20:02 +02:00
* Introduce RelatedObjectCountField * Introduce get_annotations_for_serializer() and enable dynamic annotations * Add RelatedObjectCountFields to serializers; remove static annotations from querysets * Remove annotations cleanup logic from BriefModeMixin * Annotate type for RelatedObjectCountField * Remove redundant field on TagSerializer * Add missing reverse relationship for power feeds to rack * Refactor RelatedObjectCountField to take a single relationship name
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from drf_spectacular.utils import extend_schema_serializer
|
||||
from rest_framework import serializers
|
||||
|
||||
from netbox.api.fields import RelatedObjectCountField
|
||||
from netbox.api.serializers import WritableNestedSerializer
|
||||
from vpn import models
|
||||
|
||||
@@ -23,7 +24,7 @@ __all__ = (
|
||||
)
|
||||
class NestedTunnelGroupSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
|
||||
tunnel_count = serializers.IntegerField(read_only=True)
|
||||
tunnel_count = RelatedObjectCountField('tunnels')
|
||||
|
||||
class Meta:
|
||||
model = models.TunnelGroup
|
||||
|
||||
@@ -4,7 +4,7 @@ from rest_framework import serializers
|
||||
|
||||
from ipam.api.nested_serializers import NestedIPAddressSerializer, NestedRouteTargetSerializer
|
||||
from ipam.models import RouteTarget
|
||||
from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
|
||||
from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField, SerializedPKRelatedField
|
||||
from netbox.api.serializers import NetBoxModelSerializer
|
||||
from netbox.constants import NESTED_SERIALIZER_PREFIX
|
||||
from tenancy.api.nested_serializers import NestedTenantSerializer
|
||||
@@ -29,7 +29,9 @@ __all__ = (
|
||||
|
||||
class TunnelGroupSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
|
||||
tunnel_count = serializers.IntegerField(read_only=True)
|
||||
|
||||
# Related object counts
|
||||
tunnel_count = RelatedObjectCountField('tunnels')
|
||||
|
||||
class Meta:
|
||||
model = TunnelGroup
|
||||
@@ -59,11 +61,14 @@ class TunnelSerializer(NetBoxModelSerializer):
|
||||
allow_null=True
|
||||
)
|
||||
|
||||
# Related object counts
|
||||
terminations_count = RelatedObjectCountField('terminations')
|
||||
|
||||
class Meta:
|
||||
model = Tunnel
|
||||
fields = (
|
||||
'id', 'url', 'display', 'name', 'status', 'group', 'encapsulation', 'ipsec_profile', 'tenant', 'tunnel_id',
|
||||
'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
|
||||
'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'terminations_count',
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from rest_framework.routers import APIRootView
|
||||
|
||||
from netbox.api.viewsets import NetBoxModelViewSet
|
||||
from utilities.utils import count_related
|
||||
from vpn import filtersets
|
||||
from vpn.models import *
|
||||
from . import serializers
|
||||
@@ -34,17 +33,13 @@ class VPNRootView(APIRootView):
|
||||
#
|
||||
|
||||
class TunnelGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = TunnelGroup.objects.annotate(
|
||||
tunnel_count=count_related(Tunnel, 'group')
|
||||
)
|
||||
queryset = TunnelGroup.objects.all()
|
||||
serializer_class = serializers.TunnelGroupSerializer
|
||||
filterset_class = filtersets.TunnelGroupFilterSet
|
||||
|
||||
|
||||
class TunnelViewSet(NetBoxModelViewSet):
|
||||
queryset = Tunnel.objects.annotate(
|
||||
terminations_count=count_related(TunnelTermination, 'tunnel')
|
||||
)
|
||||
queryset = Tunnel.objects.all()
|
||||
serializer_class = serializers.TunnelSerializer
|
||||
filterset_class = filtersets.TunnelFilterSet
|
||||
|
||||
|
||||
Reference in New Issue
Block a user