drf впечатляюще не показывает параметры запроса в пользовательском интерфейсе swagger

У меня есть общий ListAPIView со следующей функцией запроса списка. Здесь категория - это параметр запроса. Я пытаюсь добиться того, чтобы пользовательский интерфейс swagger также отображал параметр запроса в документе пользовательского интерфейса swagger. Как этого добиться? У меня есть следующий код.

      @extend_schema(
    parameters=[
        OpenApiParameter(name='category',location=OpenApiParameter.QUERY, description='Category Id', required=False, type=int),
    ],
)
def list(self, request, *args, **kwargs):
    category_id = request.query_params.get('category')
    ....
    return Response(data)

2 ответа

Решение

Правильная точка входа для аннотаций на ApiView (здесь ListAPIView) - это метод, а не метод.

Это потому, что это фактический метод и list переносится только на прокси в миксин.

      class ListAPIView(mixins.ListModelMixin, GenericAPIView):
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

Запись в FAQ .

Аннотировать get метод и вызов self.list() себя, и параметр появится.

Я согласен с Инсой, но вы также можете украсить свой вид, чтобы избежать реализации/переопределения метода get только для его украшения.

      @extend_schema_view(
    get=extend_schema(
        parameters=[
            OpenApiParameter(name='category', description='Category Id', type=int),
        ]
    )
)
class YourListView(ListAPIView):
...

Я бросилOpenApiParameterрасположение и обязательные аргументы, поскольку они равны значениям по умолчанию.

Другие вопросы по тегам