Комментарии 5
Эх, как же в Django не хватает автогенерации OpenAPI спеков из коробки, как в FastAPI, NestJS.
Спасибо за статью) . Хотел бы добавить что в utils есть inline_serializer по сути тот же DynamicFieldsModelSerializer(serializers.ModelSerializer) но не надо писать кас томное решение.
Да, inline_serializer заслуживает упоминания в статье на самом деле, пробовал пользоваться им.
Во-первых, хотел бы сказать, что это всё-таки разные вещи, в случае динамического сериализатора вы указываете просто название отдаваемых полей, а в случае inline_serializer, вы должны полностью описать вложенную структуру, как если бы это был вложенный сериализатор. inline_serializer позволяет бороться с circular dependencies, позволят не писать громоздкие сериализаторы для вложенных структур. Но вообще, за пределами @extend_schema
им лучше не пользоваться, это написано и в описании к нему.
А во-вторых, схема может начать расходиться. С виду вроде всё ок, но в случае inline_serializer формат респонса будет выглядеть как один тип, а в случае полноценного сериализатора для вложенных структур это будет ref (ссылка) на уже другой тип и кодогенерация по спеке может перестать генерить типы. Т.е. в сваггере в UI будет примерно то же самое, а в самом yaml будут расхождения, поэтому я от его использования решил отказаться. Если кодогенерацию по спеке не используете и фронтенд-разработчикам достаточно UI, то тогда можно наверное пользоваться.
Интеграция и кастомизация OpenAPI в Django/Django Rest Framework