From 6694d7c5aeeab45980765909f45e51672eef0386 Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Mon, 1 Jul 2019 17:36:16 +0100 Subject: [PATCH 1/2] Fix default manager check --- graphene_django/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphene_django/fields.py b/graphene_django/fields.py index 8c8fa2bd7..eb1215ead 100644 --- a/graphene_django/fields.py +++ b/graphene_django/fields.py @@ -101,7 +101,7 @@ def resolve_connection(cls, connection, default_manager, args, iterable): iterable = default_manager iterable = maybe_queryset(iterable) if isinstance(iterable, QuerySet): - if iterable is not default_manager: + if iterable.model.objects is not default_manager: default_queryset = maybe_queryset(default_manager) iterable = cls.merge_querysets(default_queryset, iterable) _len = iterable.count() From daee6e53514f0061629862c60f39e40f58393145 Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Mon, 1 Jul 2019 18:27:35 +0100 Subject: [PATCH 2/2] Add test --- graphene_django/tests/test_query.py | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 484a225aa..f4661221c 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -1065,3 +1065,54 @@ class Query(graphene.ObjectType): result = schema.execute(query) assert not result.errors assert result.data == expected + + +def test_should_preserve_prefetch_related(django_assert_num_queries): + class ReporterType(DjangoObjectType): + class Meta: + model = Reporter + interfaces = (graphene.relay.Node,) + + class FilmType(DjangoObjectType): + reporters = DjangoConnectionField(ReporterType) + + class Meta: + model = Film + interfaces = (graphene.relay.Node,) + + class Query(graphene.ObjectType): + films = DjangoConnectionField(FilmType) + + def resolve_films(root, info): + qs = Film.objects.prefetch_related("reporters") + return qs + + r1 = Reporter.objects.create(first_name="Dave", last_name="Smith") + r2 = Reporter.objects.create(first_name="Jane", last_name="Doe") + + f1 = Film.objects.create() + f1.reporters.set([r1, r2]) + f2 = Film.objects.create() + f2.reporters.set([r2]) + + query = """ + query { + films { + edges { + node { + reporters { + edges { + node { + firstName + } + } + } + } + } + } + } + """ + schema = graphene.Schema(query=Query) + with django_assert_num_queries(3) as captured: + result = schema.execute(query) + assert not result.errors