I want to generate swagger (OpenAPI) schema for my DRF project.
How can I add query parameters specification to the generated schema?
Take a look at FileViewSet.list method. Here request.GET parameter project should be documented (required), but automatic schema generation misses it.
Here is example api project:
# views.py
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
fields = ('name', 'id', 'project')
class FileViewSet(viewsets.ModelViewSet):
queryset = File.objects.all()
serializer_class = FileSerializer
def list(self, request):
project = request.GET.get("project", None)
qs = self.get_queryset().filter(project=project)
router = routers.DefaultRouter(trailing_slash=False)
router.register(r'^file$', FileViewSet)
# OpenAPI Schema generation
class SwaggerRenderer(renderers.BaseRenderer):
media_type = 'application/openapi+json'
format = 'swagger'
def render(self, data, media_type=None, renderer_context=None):
codec = OpenAPICodec()
return codec.dump(data)
schema_view = get_schema_view(
title='API',
public=True,
renderer_classes=[SwaggerRenderer],
authentication_classes=[],
permission_classes=[AllowAny],
patterns=router.urls,
)
api_urls = router.urls + [url(r'^schema$', schema_view, name="schema")]
And then inluding api_urls in the urls.py:
# urls .py
from .views import api_urls
urlpatterns = [
url(r'^v1/', include(api_urls, namespace="v1")),
]
There is DRF coreapi ManualScheme docs for manually documenting APIView to add custom fields, but there is no documentation for ViewSet's.
