I can't get DRF-Spectactular to generate OpenApiParameter valuesin Swagger for functions, only classes

23 Views Asked by At

Currently I'm working on a django project and I have an api_views.py file with the following view function:

@api_view(["GET"])
@extend_schema(
    parameters=[
        OpenApiParameter(
            name="jurisdiction", description="City for the query", required=True, type=str, default="Boston"
        ),
    ],
    description='More descriptive text',
    responses={200: OpenApiTypes.OBJECT},  # Define your response schema
)
def distinct_address_autocomplete(request: Request):
    jurisdiction = request.GET.get("jurisdiction", "Boston")

    # Get distinct addresses for the city
    addresses = get_distinct_addresses(jurisdiction)

    # Filter addresses based on user's query
    filtered_addresses = addresses  # Implement your filtering logic

    return Response(filtered_addresses)

I've got it all set up correctly in all the settings.py and urls.py because it shows up in swagger, but incorrectly. The OpenApiParameter doesn't show up at all, it looks like this:

screenshot of swagger

But when I refactor this as a class like so:

class DistinctAddressAutocompleteView(APIView):
    @extend_schema(
        parameters=[
            OpenApiParameter(
                name="jurisdiction", description="City for the query", required=True, type=str, default="Boston"
            ),
        ],
        description='More descriptive text',
        responses={200: OpenApiTypes.OBJECT},  # Define your response schema
    )
    def get(self, request: Request):
        jurisdiction = request.GET.get("jurisdiction", "Boston")

        # Get distinct addresses for the city
        addresses = get_distinct_addresses(jurisdiction)

        # Filter addresses based on user's query
        filtered_addresses = addresses  # Implement your filtering logic

        return Response(filtered_addresses)

The parameter shows up!

Class API view working as intended

What am I doing wrong on the function view? As best I can tell, I've set it up correctly, I've checked the DRF-Spec docs and I'm stumped at this point.

0

There are 0 best solutions below