Skip to content

Commit

Permalink
Closes #15087: Support for specifying a subset of API serializer fiel…
Browse files Browse the repository at this point in the history
…ds (#15122)

* Enable dynamic field inclusion for REST API serializers

* Recurse through nested serializer when resolving prefetches

* Remove obsolete calls to prefetch_related() for API views

* Remove support for brief_prefetch_fields viewset attribute

* Rename query parameter

* Fixes #15133: Fix FHRP group representation on assignments endpoint under brief mode (#15134)

* Fixes #15133: Fix FHRP group representation on assignments endpoint under brief mode

* Update API test

* Restore get_queryset() on BriefModeMixin, minus prefetch logic

* get_prefetches_for_serializer() should reference serializer field source if set
  • Loading branch information
jeremystretch authored Feb 14, 2024
1 parent 7272035 commit b3f25a4
Show file tree
Hide file tree
Showing 16 changed files with 176 additions and 152 deletions.
17 changes: 6 additions & 11 deletions netbox/circuits/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def get_view_name(self):
#

class ProviderViewSet(NetBoxModelViewSet):
queryset = Provider.objects.prefetch_related('asns', 'tags').annotate(
queryset = Provider.objects.annotate(
circuit_count=count_related(Circuit, 'provider')
)
serializer_class = serializers.ProviderSerializer
Expand All @@ -33,7 +33,7 @@ class ProviderViewSet(NetBoxModelViewSet):
#

class CircuitTypeViewSet(NetBoxModelViewSet):
queryset = CircuitType.objects.prefetch_related('tags').annotate(
queryset = CircuitType.objects.annotate(
circuit_count=count_related(Circuit, 'type')
)
serializer_class = serializers.CircuitTypeSerializer
Expand All @@ -45,9 +45,7 @@ class CircuitTypeViewSet(NetBoxModelViewSet):
#

class CircuitViewSet(NetBoxModelViewSet):
queryset = Circuit.objects.prefetch_related(
'type', 'tenant', 'provider', 'provider_account', 'termination_a', 'termination_z'
).prefetch_related('tags')
queryset = Circuit.objects.all()
serializer_class = serializers.CircuitSerializer
filterset_class = filtersets.CircuitFilterSet

Expand All @@ -57,20 +55,17 @@ class CircuitViewSet(NetBoxModelViewSet):
#

class CircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet):
queryset = CircuitTermination.objects.prefetch_related(
'circuit', 'site', 'provider_network', 'cable__terminations'
)
queryset = CircuitTermination.objects.all()
serializer_class = serializers.CircuitTerminationSerializer
filterset_class = filtersets.CircuitTerminationFilterSet
brief_prefetch_fields = ['circuit']


#
# Provider accounts
#

class ProviderAccountViewSet(NetBoxModelViewSet):
queryset = ProviderAccount.objects.prefetch_related('provider', 'tags')
queryset = ProviderAccount.objects.all()
serializer_class = serializers.ProviderAccountSerializer
filterset_class = filtersets.ProviderAccountFilterSet

Expand All @@ -80,6 +75,6 @@ class ProviderAccountViewSet(NetBoxModelViewSet):
#

class ProviderNetworkViewSet(NetBoxModelViewSet):
queryset = ProviderNetwork.objects.prefetch_related('tags')
queryset = ProviderNetwork.objects.all()
serializer_class = serializers.ProviderNetworkSerializer
filterset_class = filtersets.ProviderNetworkFilterSet
4 changes: 2 additions & 2 deletions netbox/core/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def sync(self, request, pk):


class DataFileViewSet(NetBoxReadOnlyModelViewSet):
queryset = DataFile.objects.defer('data').prefetch_related('source')
queryset = DataFile.objects.defer('data')
serializer_class = serializers.DataFileSerializer
filterset_class = filtersets.DataFileFilterSet

Expand All @@ -53,6 +53,6 @@ class JobViewSet(ReadOnlyModelViewSet):
"""
Retrieve a list of job results
"""
queryset = Job.objects.prefetch_related('user')
queryset = Job.objects.all()
serializer_class = serializers.JobSerializer
filterset_class = filtersets.JobFilterSet
Loading

0 comments on commit b3f25a4

Please sign in to comment.