Skip to content

Commit 9e6fc7f

Browse files
committed
Allow using a custom resolver function on DjangoConnectionField
1 parent 6f21dc7 commit 9e6fc7f

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

graphene_django/fields.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,12 @@ def connection_resolver(
245245
return on_resolve(iterable)
246246

247247
def wrap_resolve(self, parent_resolver):
248+
# skip the wrap_resolve method on ConnectionField as it's already
249+
# wrapping the connection_resolver, so we don't want to do it twice
250+
resolver = super(ConnectionField, self).wrap_resolve(parent_resolver)
248251
return partial(
249252
self.connection_resolver,
250-
parent_resolver,
253+
resolver,
251254
self.connection_type,
252255
self.get_manager(),
253256
self.get_queryset_resolver(),

graphene_django/tests/test_fields.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from django.db.models import Count, Prefetch
66

77
from graphene import List, NonNull, ObjectType, Schema, String
8+
from graphene.relay import Node
89

9-
from ..fields import DjangoListField
10+
from ..fields import DjangoConnectionField, DjangoListField
1011
from ..types import DjangoObjectType
1112
from .models import (
1213
Article as ArticleModel,
@@ -716,3 +717,37 @@ def resolve_articles(root, info):
716717
r'SELECT .* FROM "tests_film" INNER JOIN "tests_film_reporters" .* LEFT OUTER JOIN "tests_filmdetails"',
717718
captured.captured_queries[1]["sql"],
718719
)
720+
721+
722+
class TestDjangoConnectionField:
723+
def test_can_use_custom_resolver(self):
724+
def resolve_some_people(*args, **kwargs):
725+
return PersonModel.objects.filter(name="Bob")
726+
727+
class PersonType(DjangoObjectType):
728+
class Meta:
729+
model = PersonModel
730+
interfaces = (Node,)
731+
732+
class Query(ObjectType):
733+
people = DjangoConnectionField(PersonType, resolver=resolve_some_people)
734+
735+
schema = Schema(query=Query)
736+
PersonModel.objects.create(name="Bob")
737+
PersonModel.objects.create(name="Alice")
738+
739+
query = """
740+
query {
741+
people {
742+
edges {
743+
node {
744+
name
745+
}
746+
}
747+
}
748+
}
749+
"""
750+
751+
result = schema.execute(query)
752+
assert not result.errors
753+
assert result.data == {"people": {"edges": [{"node": {"name": "Bob"}}]}}

0 commit comments

Comments
 (0)