Skip to content

Commit

Permalink
Update filter backend+tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryan P Kilby committed Oct 23, 2017
1 parent ef351e4 commit 5d54ebf
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
4 changes: 1 addition & 3 deletions django_filters/rest_framework/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,7 @@ def filter_queryset(self, request, queryset, view):
if filter_class:
filterset = filter_class(request.query_params, queryset=queryset, request=request)
if not filterset.is_valid() and self.raise_exception:
from rest_framework.exceptions import ValidationError

raise ValidationError(utils.raw_validation(filterset.errors))
raise utils.translate_validation(filterset.errors)
return filterset.qs
return queryset

Expand Down
28 changes: 26 additions & 2 deletions tests/rest_framework/test_backends.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from __future__ import unicode_literals

import datetime
import warnings
from decimal import Decimal
from unittest import skipIf

from django.db.models import BooleanField
Expand All @@ -18,6 +16,7 @@
backends
)

from ..models import Article
from .models import FilterableItem

factory = APIRequestFactory()
Expand Down Expand Up @@ -227,3 +226,28 @@ class Backend(DjangoFilterBackend):
# derived filter_class.Meta should inherit from default_filter_set.Meta
self.assertIn(BooleanField, filter_overrides)
self.assertDictEqual(filter_overrides[BooleanField], {})


class ValidationErrorTests(TestCase):

def test_errors(self):
class F(FilterSet):
class Meta:
model = Article
fields = ['id', 'author', 'name']

view = FilterFieldsRootView()
backend = DjangoFilterBackend()
request = factory.get('/?id=foo&author=bar&name=baz')
request = view.initialize_request(request)
queryset = Article.objects.all()
view.filter_class = F

with self.assertRaises(serializers.ValidationError) as exc:
backend.filter_queryset(request, queryset, view)

# test output, does not include error code
self.assertDictEqual(exc.exception.detail, {
'id': ['Enter a number.'],
'author': ['Select a valid choice. That choice is not one of the available choices.'],
})

0 comments on commit 5d54ebf

Please sign in to comment.