From c232ca7acc1d626f7c6d945faf3cf9db5ecc5401 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Tue, 21 Jan 2025 17:42:43 +0100 Subject: [PATCH] Fix request OpenAPI schemas for nested models --- netbox/core/api/schema.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index 663ee2899..11a39fff5 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -277,3 +277,21 @@ class FixSerializedPKRelatedField(OpenApiSerializerFieldExtension): return component.ref if component else None else: return build_basic_type(OpenApiTypes.INT) + + +# Nested models can be passed by ID in requests +# The logic for this is handled in `BaseModelSerializer.to_internal_value` +class FixWritableNestedSerializerAllowPK(OpenApiSerializerFieldExtension): + target_class = 'netbox.api.serializers.BaseModelSerializer' + match_subclasses = True + + def map_serializer_field(self, auto_schema, direction): + schema = auto_schema._map_serializer_field(self.target, direction, bypass_extensions=True) + if direction == 'request' and self.target.nested: + return { + 'oneOf': [ + build_basic_type(OpenApiTypes.NUMBER), + schema, + ] + } + return schema