Skip to content

Commit a1cc52c

Browse files
committed
Allow using a custom resolver function on DjangoConnectionField
1 parent 3f813d4 commit a1cc52c

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

graphene_django/fields.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,12 @@ def connection_resolver(
251251
return on_resolve(iterable)
252252

253253
def wrap_resolve(self, parent_resolver):
254+
# skip the wrap_resolve method on ConnectionField as it's already
255+
# wrapping the connection_resolver, so we don't want to do it twice
256+
resolver = super(ConnectionField, self).wrap_resolve(parent_resolver)
254257
return partial(
255258
self.connection_resolver,
256-
parent_resolver,
259+
resolver,
257260
self.connection_type,
258261
self.get_manager(),
259262
self.get_queryset_resolver(),

graphene_django/tests/test_fields.py

+32
Original file line numberDiff line numberDiff line change
@@ -748,3 +748,35 @@ class Query(ObjectType):
748748
match="DjangoConnectionField only accepts DjangoObjectType types as underlying type",
749749
):
750750
Schema(query=Query)
751+
752+
def test_can_use_custom_resolver(self):
753+
def resolve_some_people(*args, **kwargs):
754+
return PersonModel.objects.filter(name="Bob")
755+
756+
class PersonType(DjangoObjectType):
757+
class Meta:
758+
model = PersonModel
759+
interfaces = (Node,)
760+
761+
class Query(ObjectType):
762+
people = DjangoConnectionField(PersonType, resolver=resolve_some_people)
763+
764+
schema = Schema(query=Query)
765+
PersonModel.objects.create(name="Bob")
766+
PersonModel.objects.create(name="Alice")
767+
768+
query = """
769+
query {
770+
people {
771+
edges {
772+
node {
773+
name
774+
}
775+
}
776+
}
777+
}
778+
"""
779+
780+
result = schema.execute(query)
781+
assert not result.errors
782+
assert result.data == {"people": {"edges": [{"node": {"name": "Bob"}}]}}

0 commit comments

Comments
 (0)