Невозможно указать поля в 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")