django-rest-framework-json-api icon indicating copy to clipboard operation
django-rest-framework-json-api copied to clipboard

Filtering by a field that starts with "filter" fails

Open Roanmh opened this issue 5 months ago • 1 comments

Description of the Bug Report

We have a model with a field filter_query and we want to support filtering by this field. The query param filter_query=foo always fails with the message "invalid query parameter: filter_query". However the query parameter of the other syntax works: filter[filter_query]=foo.

The error is thrown from here.

Traceback
Traceback (most recent call last):
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/django/core/handlers/base.py", line 220, in _get_response
    response = response.render()
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/django/template/response.py", line 114, in render
    self.content = self.rendered_content
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework/response.py", line 70, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework/renderers.py", line 723, in render
    context = self.get_context(data, accepted_media_type, renderer_context)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework/renderers.py", line 701, in get_context
    'filter_form': self.get_filter_form(data, view, request),
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework/renderers.py", line 633, in get_filter_form
    html = backend().to_html(request, queryset, view)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/django_filters/rest_framework/backends.py", line 99, in to_html
    filterset = self.get_filterset(request, queryset, view)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework_json_api/django_filters/backends.py", line 91, in get_filterset
    kwargs = self.get_filterset_kwargs(request, queryset, view)
  File "/Users/haydenr/.pyenv/versions/3.12.5/envs/proj/lib/python3.12/site-packages/rest_framework_json_api/django_filters/backends.py", line 114, in get_filterset_kwargs
    raise ValidationError(f"invalid query parameter: {qp}")

I think the regex is matching this field as an instance of the filter[param] syntax erroneously.

Checklist

  • [x] Certain that this is a bug (if unsure or you have a question use discussions instead)
  • [x] Code snippet or unit test added to reproduce bug

Roanmh avatar Aug 27 '24 22:08 Roanmh