Skip to content

Commit 9411e76

Browse files
authored
Merge pull request #197 from kwongtn/pass-info-in-generic-filter
Pass info for generic filter type
2 parents 4c60c50 + dd13461 commit 9411e76

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

strawberry_django/filters.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ def apply(filters, queryset: QuerySet, info=UNSET, pk=UNSET) -> QuerySet:
146146

147147
filter_method = getattr(filters, "filter", None)
148148
if filter_method:
149-
return filter_method(queryset)
149+
if function_allow_passing_info(filter_method):
150+
return filter_method(queryset=queryset, info=info)
151+
152+
else:
153+
return filter_method(queryset=queryset)
150154

151155
filter_kwargs, filter_methods = build_filter_kwargs(filters)
152156
queryset = queryset.filter(**filter_kwargs)

tests/filters/test_filters.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,33 @@ def fruits(filters: FruitFilterWithInfo, info: Info) -> List[Fruit]:
201201
]
202202

203203

204+
def test_resolver_filter_override_with_info(fruits):
205+
from strawberry.types.info import Info
206+
207+
@strawberry_django.filters.filter(models.Fruit, lookups=True)
208+
class FruitFilterWithInfo:
209+
custom_field: bool
210+
211+
def filter(self, queryset, info: Info):
212+
# Test here is to prove that info can be passed properly
213+
assert isinstance(info, Info)
214+
return queryset.filter(name="banana")
215+
216+
@strawberry.type
217+
class Query:
218+
@strawberry.field
219+
def fruits(filters: FruitFilterWithInfo, info: Info) -> List[Fruit]:
220+
queryset = models.Fruit.objects.all()
221+
return strawberry_django.filters.apply(filters, queryset, info=info)
222+
223+
query = utils.generate_query(Query)
224+
result = query("{ fruits(filters: { customField: true }) { id name } }")
225+
assert not result.errors
226+
assert result.data["fruits"] == [
227+
{"id": "3", "name": "banana"},
228+
]
229+
230+
204231
def test_resolver_nonfilter(fruits):
205232
@strawberry.type
206233
class Query:

0 commit comments

Comments
 (0)