diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index 84bfae3bcc1..0c59da5a198 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -295,3 +295,23 @@ def map_serializer(self, auto_schema: 'AutoSchema', direction: Direction) -> _Sc 'maxItems': 2, }, } + + +# 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 schema is None: + return schema + if direction == 'request' and self.target.nested: + return { + 'oneOf': [ + build_basic_type(OpenApiTypes.INT), + schema, + ] + } + return schema