Невозможно указать поля в drf queryset с помощью drf-yasg

class ABC(generics.ListCreateApiView):
         @swagger_auto_schema(
            operation_description="THIS API IS TO CREATE MESSAGES IN A LIST ",
            auto_schema=AcceptFormDataSchema,
            request_body=MessageGetSerializer
         )
         def get_queryset(self):
             data =self.request.GET.get("code")
             ...
    @swagger_auto_schema(
        operation_description="THIS API IS TO CREATE MESSAGES IN A LIST ",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            required=["data"],
            properties={
                "code": openapi.Schema(type=openapi.TYPE_STRING),
         def post(self, request):
             brand_code = request.data.get("code")
             .....
#serializer.py

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Messages
        fields = ("message_id", "content", "description")

Мой метод post прекрасно работает с полями, которые мне нужны, используя тот же сериализатор, но он не работает для метода get_queryset. Может ли кто-нибудь подсказать, как мне получить поля с помощью drf-yasg?

Вы не должны украшать get_queryset, поскольку это внутренняя функция, а не часть конечных точек ApiView. Вероятно, вы видите запрос get в swagger, потому что используемый вами ListCreateApiView определяет обработчики для методов get и post - операций представления list и create соответственно.

Поскольку вы не переопределяете операцию list, вы можете внедрить декоратор в ApiView метод list, используя method_decorator Django, как указано в drf-yasg разделе swagger_auto_schema декоратор.

Ниже приведен пример реализации для вашего ApiView, который также должен документировать конечную точку list.

@method_decorator(
    name='list',
    decorator=swagger_auto_schema(
        operation_description="description from swagger_auto_schema via method_decorator"
    )
)
class ABC(generics.ListCreateApiView):
    serializer_class = MessageSerializer

    def get_queryset(self):
        data =self.request.GET.get("code")
        ...
    @swagger_auto_schema(
        operation_description="THIS API IS TO CREATE MESSAGES IN A LIST ",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            required=["data"],
            properties={
                "code": openapi.Schema(type=openapi.TYPE_STRING),
            },
         )
     )
     def post(self, request):
         brand_code = request.data.get("code")
         ...

--------------
#serializer.py

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Messages
        fields = ("message_id", "content", "description")
Вернуться на верх