Skip to content

Commit 7e7f18e

Browse files
bellini666jkimbo
authored andcommitted
Keep original queryset on DjangoFilterConnectionField (#816)
* Keep original queryset on DjangoFilterConnectionField The PR #796 broke DjangoFilterConnectionField making it always get the raw queryset from the model to apply the filters in it. This makes sure that the DjangoObjectType's .get_queryset is called, keeping any filtering it might have made. * Add regression test
1 parent e82a2d7 commit 7e7f18e

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

graphene_django/filter/fields.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ def filtering_args(self):
5555
def resolve_queryset(
5656
cls, connection, iterable, info, args, filtering_args, filterset_class
5757
):
58+
qs = super(DjangoFilterConnectionField, cls).resolve_queryset(
59+
connection, iterable, info, args
60+
)
5861
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
59-
return filterset_class(
60-
data=filter_kwargs, queryset=iterable, request=info.context
61-
).qs
62+
return filterset_class(data=filter_kwargs, queryset=qs, request=info.context).qs
6263

6364
def get_queryset_resolver(self):
6465
return partial(

graphene_django/filter/tests/test_fields.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,44 @@ def resolve_all_reporters(self, info, **args):
756756
assert result.data == expected
757757

758758

759+
def test_node_get_queryset_is_called():
760+
class ReporterType(DjangoObjectType):
761+
class Meta:
762+
model = Reporter
763+
interfaces = (Node,)
764+
filter_fields = ()
765+
766+
@classmethod
767+
def get_queryset(cls, queryset, info):
768+
return queryset.filter(first_name="b")
769+
770+
class Query(ObjectType):
771+
all_reporters = DjangoFilterConnectionField(
772+
ReporterType, reverse_order=Boolean()
773+
)
774+
775+
Reporter.objects.create(first_name="b")
776+
Reporter.objects.create(first_name="a")
777+
778+
schema = Schema(query=Query)
779+
query = """
780+
query NodeFilteringQuery {
781+
allReporters(first: 10) {
782+
edges {
783+
node {
784+
firstName
785+
}
786+
}
787+
}
788+
}
789+
"""
790+
expected = {"allReporters": {"edges": [{"node": {"firstName": "b"}}]}}
791+
792+
result = schema.execute(query)
793+
assert not result.errors
794+
assert result.data == expected
795+
796+
759797
def test_integer_field_filter_type():
760798
class PetType(DjangoObjectType):
761799
class Meta:

0 commit comments

Comments
 (0)