From be79bb74c2e58da507f0ad89a4c9a55221440589 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 13 Mar 2023 14:12:49 -0700 Subject: [PATCH] 9608 fix choices --- netbox/dcim/schema.py | 18 +++++++++++++++++- netbox/netbox/api/fields.py | 1 - 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/schema.py b/netbox/dcim/schema.py index 47b3ba832..3ec26b6a1 100644 --- a/netbox/dcim/schema.py +++ b/netbox/dcim/schema.py @@ -3,7 +3,7 @@ from drf_spectacular.extensions import ( ) from drf_spectacular.extensions import OpenApiViewExtension from drf_spectacular.utils import extend_schema -from drf_spectacular.plumbing import build_basic_type +from drf_spectacular.plumbing import build_basic_type, build_object_type from drf_spectacular.types import OpenApiTypes @@ -12,3 +12,19 @@ class FixTimeZoneSerializerField(OpenApiSerializerFieldExtension): def map_serializer_field(self, auto_schema, direction): return build_basic_type(OpenApiTypes.STR) + + +class ChoiceFieldFix(OpenApiSerializerFieldExtension): + target_class = 'netbox.api.fields.ChoiceField' + + def map_serializer_field(self, auto_schema, direction): + if direction == 'request': + return build_basic_type(OpenApiTypes.STR) + + elif direction == "response": + return build_object_type( + properties={ + "value": build_basic_type(OpenApiTypes.STR), + "label": build_basic_type(OpenApiTypes.STR), + } + ) diff --git a/netbox/netbox/api/fields.py b/netbox/netbox/api/fields.py index ed70c28ac..347ed55bd 100644 --- a/netbox/netbox/api/fields.py +++ b/netbox/netbox/api/fields.py @@ -14,7 +14,6 @@ __all__ = ( ) -@extend_schema_field(OpenApiTypes.STR) class ChoiceField(serializers.Field): """ Represent a ChoiceField as {'value': , 'label': }. Accepts a single value on write.