Определение пользовательского запроса - 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
  ...
Вернуться на верх