diff --git a/CHANGELOG.md b/CHANGELOG.md index 19ce7f65..3f81d85e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ any parts of the framework not mentioned in the documentation should generally b ### Fixed * Avoid exception when trying to include skipped relationship +* Don't swallow `filter[]` params when there are several ## [2.7.0] - 2019-01-14 diff --git a/example/tests/test_filters.py b/example/tests/test_filters.py index f0243457..586105f6 100644 --- a/example/tests/test_filters.py +++ b/example/tests/test_filters.py @@ -503,3 +503,18 @@ def test_param_duplicate(self): dja_response = response.json() self.assertEqual(dja_response['errors'][0]['detail'], "repeated query parameter not allowed: sort") + + def test_many_params(self): + """ + Test that filter params aren't ignored when many params are present + """ + response = self.client.get(self.url, + data={'filter[headline.regex]': '^A', + 'filter[body_text.regex]': '^IN', + 'filter[blog.name]': 'ANTB', + 'page[size]': 3}) + self.assertEqual(response.status_code, 200, + msg=response.content.decode("utf-8")) + dja_response = response.json() + self.assertEqual(len(dja_response['data']), 1) + self.assertEqual(dja_response['data'][0]['id'], '1') diff --git a/rest_framework_json_api/django_filters/backends.py b/rest_framework_json_api/django_filters/backends.py index 073315bc..42671ca8 100644 --- a/rest_framework_json_api/django_filters/backends.py +++ b/rest_framework_json_api/django_filters/backends.py @@ -4,7 +4,6 @@ from django_filters.rest_framework import DjangoFilterBackend from rest_framework.exceptions import ValidationError from rest_framework.settings import api_settings - from rest_framework_json_api.utils import format_value @@ -102,7 +101,7 @@ def get_filterset_kwargs(self, request, queryset, view): filter_keys = [] # rewrite filter[field] query params to make DjangoFilterBackend work. data = request.query_params.copy() - for qp, val in data.items(): + for qp, val in request.query_params.items(): m = self.filter_regex.match(qp) if m and (not m.groupdict()['assoc'] or m.groupdict()['ldelim'] != '[' or m.groupdict()['rdelim'] != ']'):