|
14 | 14 | from django_filters.filters import (
|
15 | 15 | AllValuesFilter,
|
16 | 16 | AllValuesMultipleFilter,
|
| 17 | + BaseInFilter, |
17 | 18 | CharFilter,
|
18 | 19 | ChoiceFilter,
|
19 | 20 | DateFromToRangeFilter,
|
|
31 | 32 | TypedMultipleChoiceFilter,
|
32 | 33 | )
|
33 | 34 | from django_filters.filterset import FilterSet
|
| 35 | +from django_filters.widgets import QueryArrayWidget |
34 | 36 |
|
35 | 37 | from .models import (
|
36 | 38 | STATUS_CHOICES,
|
@@ -1977,10 +1979,10 @@ class Meta:
|
1977 | 1979 |
|
1978 | 1980 | class MiscFilterSetTests(TestCase):
|
1979 | 1981 | def setUp(self):
|
1980 |
| - User.objects.create(username="alex", status=1) |
1981 |
| - User.objects.create(username="jacob", status=2) |
1982 |
| - User.objects.create(username="aaron", status=2) |
1983 |
| - User.objects.create(username="carl", status=0) |
| 1982 | + User.objects.create(username="alex", last_name="johnson", status=1) |
| 1983 | + User.objects.create(username="jacob", last_name="johnson", status=2) |
| 1984 | + User.objects.create(username="aaron", last_name="white", status=2) |
| 1985 | + User.objects.create(username="carl", last_name="black", status=0) |
1984 | 1986 |
|
1985 | 1987 | def test_filtering_with_declared_filters(self):
|
1986 | 1988 | class F(FilterSet):
|
@@ -2056,3 +2058,36 @@ class Meta:
|
2056 | 2058 | f = F({"status": "2"}, queryset=qs)
|
2057 | 2059 | self.assertEqual(len(f.qs), 2)
|
2058 | 2060 | self.assertEqual(f.qs.count(), 2)
|
| 2061 | + |
| 2062 | + def test_filtering_with_widgets(self): |
| 2063 | + class CharInFilter(BaseInFilter, CharFilter): |
| 2064 | + pass |
| 2065 | + |
| 2066 | + class F(FilterSet): |
| 2067 | + last_name = CharInFilter(widget=QueryArrayWidget) |
| 2068 | + username = CharInFilter() |
| 2069 | + |
| 2070 | + class Meta: |
| 2071 | + model = User |
| 2072 | + fields = ["last_name", "username"] |
| 2073 | + |
| 2074 | + qs = User.objects.all() |
| 2075 | + |
| 2076 | + f = F({"last_name": ["johnson"]}, queryset=qs) |
| 2077 | + self.assertQuerysetEqual( |
| 2078 | + f.qs, ["alex", "jacob"], lambda o: o.username, ordered=False |
| 2079 | + ) |
| 2080 | + |
| 2081 | + f = F({"last_name": ["johnson"], "username": "carl"}, queryset=qs) |
| 2082 | + self.assertQuerysetEqual(f.qs, [], lambda o: o.username, ordered=False) |
| 2083 | + |
| 2084 | + f = F({"last_name": ["johnson"], "username": "jacob"}, queryset=qs) |
| 2085 | + self.assertQuerysetEqual(f.qs, ["jacob"], lambda o: o.username, ordered=False) |
| 2086 | + |
| 2087 | + f = F( |
| 2088 | + {"last_name": ["johnson", "white"], "username": "jacob, carl, aaron"}, |
| 2089 | + queryset=qs, |
| 2090 | + ) |
| 2091 | + self.assertQuerysetEqual( |
| 2092 | + f.qs, ["jacob", "aaron"], lambda o: o.username, ordered=False |
| 2093 | + ) |
0 commit comments