diff --git a/django_filters/filters.py b/django_filters/filters.py index 6ec94624..f99e82cf 100644 --- a/django_filters/filters.py +++ b/django_filters/filters.py @@ -759,7 +759,11 @@ def filter(self, qs, value): if value in EMPTY_VALUES: return qs - ordering = [self.get_ordering_value(param) for param in value] + ordering = [ + self.get_ordering_value(param) + for param in value + if param not in EMPTY_VALUES + ] return qs.order_by(*ordering) @classmethod diff --git a/tests/test_filtering.py b/tests/test_filtering.py index b9b30f9a..6775e7f0 100644 --- a/tests/test_filtering.py +++ b/tests/test_filtering.py @@ -1976,9 +1976,15 @@ class Meta: fields = ["username"] qs = User.objects.all() - f = F({"o": "username"}, queryset=qs) - names = f.qs.values_list("username", flat=True) - self.assertEqual(list(names), ["aaron", "alex", "carl", "jacob"]) + tests = [ + {"o": "username"}, + QueryDict("o=username,"), + ] + for data in tests: + with self.subTest(data=data): + f = F(data, queryset=qs) + names = f.qs.values_list("username", flat=True) + self.assertEqual(list(names), ["aaron", "alex", "carl", "jacob"]) def test_ordering_with_select_widget(self): class F(FilterSet): @@ -1993,6 +1999,27 @@ class Meta: names = f.qs.values_list("username", flat=True) self.assertEqual(list(names), ["aaron", "alex", "carl", "jacob"]) + def test_csv_input(self): + class F(FilterSet): + o = OrderingFilter(widget=forms.Select, fields=("username",),) + + class Meta: + model = User + fields = ["username"] + + qs = User.objects.all() + tests = [ + {"o": ","}, + QueryDict("o=%2c"), + QueryDict("o=,"), + ] + for data in tests: + with self.subTest(data=data): + f = F(data, queryset=qs) + self.assertIs(True, f.is_valid()) + names = f.qs.values_list("username", flat=True) + self.assertEqual(list(names), ['alex', 'jacob', 'aaron', 'carl']) + class MiscFilterSetTests(TestCase): def setUp(self):