Есть ли способ изменить автогенерируемое имя shema сериализатора в drf-spectacular
У меня есть много сериализаторов с именами 'InputSerializer' и 'OutputSerializer', что переводится как имя схемы 'Input' и 'Output' в drf-spectacular. В итоге конечные точки api ссылаются на одну и ту же схему. Есть ли способ переопределить автогенерируемые имена схем этих сериализаторов без изменения имени класса?
Я сталкивался с этим много раз, но никогда не пытался решить эту проблему. Просматривая документацию, я нашел extended_schema_serializer, который может сделать то, что вам нужно. Вот полный api, и соответствующий пункт:
component_name- переопределение извлечения имени класса по умолчанию
@extended_schema_serializer(component_name="SomeNiceReallyLongId")
class Input(Serializer):
# pass
Длинновато и некрасиво, но это можно исправить декоратором на декораторе :D
Понятно, но уникальное имя должно откуда-то взяться, а spectacular не может знать, что является хорошим именем для вас, кроме самого имени класса. Andrew предлагает нативное решение, но есть и синтаксический сахар для этого (совместимость с drf-yasg).
class InputSerializer(serializer.Serializer):
class Meta:
ref_name = 'SomeNiceReallyLongId'
https://drf-spectacular.readthedocs.io/en/latest/drf_yasg.html?highlight=ref_name#compatibility
В противном случае я бы рекомендовал подкласс AutoSchema и переопределение _get_serializer_name и заставить его работать на вас.