Есть ли способ изменить автогенерируемое имя 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 и заставить его работать на вас.

Вернуться на верх