Skip to content

Commit 385c61c

Browse files
author
Ryan P Kilby
authored
Fix all lookups handling for related fields (#128)
1 parent b833b46 commit 385c61c

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

rest_framework_filters/filterset.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from django.utils import six
99

1010
from django_filters import filterset, rest_framework
11+
from django_filters.utils import get_model_field
1112

1213
from . import filters
1314
from . import utils
@@ -77,7 +78,7 @@ def filters_for_model(cls, model, opts):
7778
fields = fields.copy()
7879
for name, lookups in six.iteritems(fields):
7980
if lookups == filters.ALL_LOOKUPS:
80-
field = model._meta.get_field(name)
81+
field = get_model_field(model, name)
8182
fields[name] = utils.lookups_for_field(field)
8283

8384
return filterset.filters_for_model(

tests/test_filterset.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ class Meta:
6363
self.assertIsInstance(F.base_filters['author'], filters.ModelChoiceFilter)
6464
self.assertIsInstance(F.base_filters['author__in'], BaseInFilter)
6565

66+
def test_alllookupsfilter_for_related_field(self):
67+
# See: https://github.com/philipn/django-rest-framework-filters/issues/127
68+
class F(FilterSet):
69+
author = filters.AllLookupsFilter(name='author__last_name')
70+
71+
class Meta:
72+
model = Note
73+
74+
self.assertIsInstance(F.base_filters['author'], filters.CharFilter)
75+
self.assertEqual(F.base_filters['author'].name, 'author__last_name')
76+
6677
def test_relatedfilter_combined_with__all__(self):
6778
# ensure that related filter is compatible with __all__ lookups.
6879
class F(FilterSet):

0 commit comments

Comments
 (0)