Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
15 changes: 15 additions & 0 deletions example/tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
3 changes: 1 addition & 2 deletions rest_framework_json_api/django_filters/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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'] != ']'):
Expand Down