Определение пользовательского запроса - Swagger (Drf-yasg)
У меня есть сценарий использования, где требуемые поля запроса отличаются в зависимости от значения одного из полей запроса.
Пример, если значение типа перемещения в запросе равно 'P', то некоторые поля являются обязательными, иначе, если значение типа перемещения равно 'D', то некоторые другие поля являются обязательными.
Как создать пользовательский запрос для такого случая использования с помощью drf-yasg?
Основываясь на том, что я нашел в drf_yasg docs, вам нужно реализовать концепцию, называемую Inspector
классы для настройки поведения, связанного с определенным полем, сериализатора, фильтра или пагинатора, вы можете реализовать классы FieldInspector
, SerializerInspector
, FilterInspector
, PaginatorInspector
и использовать их с @swagger_auto_schema
или одним из related settings
.
Вот пример, который FieldInspector
удаляет атрибут title из всех сгенерированных объектов Schema и взят из Inspector
классов [drf_yasg-docs] :
from drf_yasg.inspectors import FieldInspector class NoSchemaTitleInspector(FieldInspector): def process_result(self, result, method_name, obj, **kwargs): # remove the `title` attribute of all Schema objects if isinstance(result, openapi.Schema.OR_REF): # traverse any references and alter the Schema object in place schema = openapi.resolve_ref(result, self.components) schema.pop('title', None) # no ``return schema`` here, because it would mean we always generate # an inline `object` instead of a definition reference # return back the same object that we got - i.e. a reference if we got >a reference return result class NoTitleAutoSchema(SwaggerAutoSchema): field_inspectors = [NoSchemaTitleInspector] + >swagger_settings.DEFAULT_FIELD_INSPECTORS class ArticleViewSet(viewsets.ModelViewSet): swagger_schema = NoTitleAutoSchema ...