Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 32 additions & 1 deletion netbox/core/api/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
get_doc,
)
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import Direction
from drf_spectacular.utils import Direction, OpenApiParameter

from netbox.api.fields import ChoiceField
from netbox.api.serializers import WritableNestedSerializer
Expand Down Expand Up @@ -274,6 +274,37 @@ def get_writable_class(self, serializer):
writable_class = self.writable_serializers[type(serializer)]
return writable_class

def get_override_parameters(self):
params = super().get_override_parameters()
# Expose the ?fields, ?omit, and ?brief query parameters supported by NetBoxModelViewSet
# for all non-bulk GET operations (both list and detail).
if not self.is_bulk_action and self.method == 'GET':
params = list(params) + [
OpenApiParameter(
name='fields',
location=OpenApiParameter.QUERY,
required=False,
type=OpenApiTypes.STR,
description='Comma-separated list of fields to include in the response. Example: `fields=id,name`.',
),
OpenApiParameter(
name='omit',
location=OpenApiParameter.QUERY,
required=False,
type=OpenApiTypes.STR,
description='Comma-separated list of fields to exclude from the response. '
'Example: `omit=description,tags`.',
),
OpenApiParameter(
name='brief',
location=OpenApiParameter.QUERY,
required=False,
type=OpenApiTypes.BOOL,
description='Return only brief fields for each object.',
),
]
return params

def get_filter_backends(self):
# bulk operations don't have filter params
if self.is_bulk_action:
Expand Down