Skip to content

Commit 40ae7e5

Browse files
authored
Fix manager check in DjangoConnectionField (#693)
* Fix default manager check * Add test
1 parent 54cc6a4 commit 40ae7e5

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

graphene_django/fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def resolve_connection(cls, connection, default_manager, args, iterable):
101101
iterable = default_manager
102102
iterable = maybe_queryset(iterable)
103103
if isinstance(iterable, QuerySet):
104-
if iterable is not default_manager:
104+
if iterable.model.objects is not default_manager:
105105
default_queryset = maybe_queryset(default_manager)
106106
iterable = cls.merge_querysets(default_queryset, iterable)
107107
_len = iterable.count()

graphene_django/tests/test_query.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,3 +1065,54 @@ class Query(graphene.ObjectType):
10651065
result = schema.execute(query)
10661066
assert not result.errors
10671067
assert result.data == expected
1068+
1069+
1070+
def test_should_preserve_prefetch_related(django_assert_num_queries):
1071+
class ReporterType(DjangoObjectType):
1072+
class Meta:
1073+
model = Reporter
1074+
interfaces = (graphene.relay.Node,)
1075+
1076+
class FilmType(DjangoObjectType):
1077+
reporters = DjangoConnectionField(ReporterType)
1078+
1079+
class Meta:
1080+
model = Film
1081+
interfaces = (graphene.relay.Node,)
1082+
1083+
class Query(graphene.ObjectType):
1084+
films = DjangoConnectionField(FilmType)
1085+
1086+
def resolve_films(root, info):
1087+
qs = Film.objects.prefetch_related("reporters")
1088+
return qs
1089+
1090+
r1 = Reporter.objects.create(first_name="Dave", last_name="Smith")
1091+
r2 = Reporter.objects.create(first_name="Jane", last_name="Doe")
1092+
1093+
f1 = Film.objects.create()
1094+
f1.reporters.set([r1, r2])
1095+
f2 = Film.objects.create()
1096+
f2.reporters.set([r2])
1097+
1098+
query = """
1099+
query {
1100+
films {
1101+
edges {
1102+
node {
1103+
reporters {
1104+
edges {
1105+
node {
1106+
firstName
1107+
}
1108+
}
1109+
}
1110+
}
1111+
}
1112+
}
1113+
}
1114+
"""
1115+
schema = graphene.Schema(query=Query)
1116+
with django_assert_num_queries(3) as captured:
1117+
result = schema.execute(query)
1118+
assert not result.errors

0 commit comments

Comments
 (0)