From 4f225b4e5644d3634d10375fb00a61657b3a319c Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Tue, 27 Aug 2024 09:57:14 -0700 Subject: [PATCH] 16670 fix OpenAPI schema generation with nested serializers (#17078) * 16670 fix OpenAPI schema generation with nested serializers * 16670 fix comment * Add comment; misc cleanup --------- Co-authored-by: Jeremy Stretch --- netbox/core/api/schema.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index bcc49d3fc..7c4ae722e 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -126,9 +126,18 @@ class NetBoxAutoSchema(AutoSchema): return response_serializers + def _get_serializer_name(self, serializer, direction, bypass_extensions=False) -> str: + name = super()._get_serializer_name(serializer, direction, bypass_extensions) + + # If this serializer is nested, prepend its name with "Brief" + if getattr(serializer, 'nested', False): + name = f'Brief{name}' + + return name + def get_serializer_ref_name(self, serializer): # from drf-yasg.utils - """Get serializer's ref_name (or None for ModelSerializer if it is named 'NestedSerializer') + """Get serializer's ref_name :param serializer: Serializer instance :return: Serializer's ``ref_name`` or ``None`` for inline serializer :rtype: str or None @@ -137,8 +146,6 @@ class NetBoxAutoSchema(AutoSchema): serializer_name = type(serializer).__name__ if hasattr(serializer_meta, 'ref_name'): ref_name = serializer_meta.ref_name - elif serializer_name == 'NestedSerializer' and isinstance(serializer, serializers.ModelSerializer): - ref_name = None else: ref_name = serializer_name if ref_name.endswith('Serializer'):