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