django-rest-framework-json-api
django-rest-framework-json-api copied to clipboard
Filtering by a field that starts with "filter" fails
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