From 5d54ebfd271a7f7e1fc2c27cfb017fbcf9e84baa Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Mon, 23 Oct 2017 19:04:58 -0400 Subject: [PATCH] Update filter backend+tests --- django_filters/rest_framework/backends.py | 4 +--- tests/rest_framework/test_backends.py | 28 +++++++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/django_filters/rest_framework/backends.py b/django_filters/rest_framework/backends.py index e9df139dc..5fd964792 100644 --- a/django_filters/rest_framework/backends.py +++ b/django_filters/rest_framework/backends.py @@ -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 diff --git a/tests/rest_framework/test_backends.py b/tests/rest_framework/test_backends.py index c5671cd05..44a02e38a 100644 --- a/tests/rest_framework/test_backends.py +++ b/tests/rest_framework/test_backends.py @@ -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 @@ -18,6 +16,7 @@ backends ) +from ..models import Article from .models import FilterableItem factory = APIRequestFactory() @@ -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.'], + })