Răsfoiți Sursa

Allow primary key for nested models in OpenAPI request schemas (#18451)

Marcus Weiner 11 luni în urmă
părinte
comite
631ff3e702
1 a modificat fișierele cu 20 adăugiri și 0 ștergeri
  1. 20 0
      netbox/core/api/schema.py

+ 20 - 0
netbox/core/api/schema.py

@@ -295,3 +295,23 @@ class FixIntegerRangeSerializerSchema(OpenApiSerializerExtension):
                 '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