Skip to content

Commit 7b35695

Browse files
authored
Fix 1061: DjangoListField should not cache queries (#1063)
* fix( DjangoListField ): test that default functionality should resolve/call queryset at view time, first attempt at solution * fix( DjangoListField ): DjangoListField defines get_manager just like DjangoConnectionField for a better variable name default_manager instead of default_queryset * fix: apply specific black formatting
1 parent 454b740 commit 7b35695

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

graphene_django/fields.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ def _underlying_type(self):
4343
def model(self):
4444
return self._underlying_type._meta.model
4545

46-
def get_default_queryset(self):
47-
return self.model._default_manager.get_queryset()
46+
def get_manager(self):
47+
return self.model._default_manager
4848

4949
@staticmethod
5050
def list_resolver(
51-
django_object_type, resolver, default_queryset, root, info, **args
51+
django_object_type, resolver, default_manager, root, info, **args
5252
):
5353
queryset = maybe_queryset(resolver(root, info, **args))
5454
if queryset is None:
55-
queryset = default_queryset
55+
queryset = maybe_queryset(default_manager)
5656

5757
if isinstance(queryset, QuerySet):
5858
# Pass queryset to the DjangoObjectType get_queryset method
@@ -66,10 +66,7 @@ def get_resolver(self, parent_resolver):
6666
_type = _type.of_type
6767
django_object_type = _type.of_type.of_type
6868
return partial(
69-
self.list_resolver,
70-
django_object_type,
71-
parent_resolver,
72-
self.get_default_queryset(),
69+
self.list_resolver, django_object_type, parent_resolver, self.get_manager(),
7370
)
7471

7572

graphene_django/tests/test_fields.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,39 @@ class Query(ObjectType):
7575
"reporters": [{"firstName": "Tara"}, {"firstName": "Debra"}]
7676
}
7777

78+
def test_list_field_queryset_is_not_cached(self):
79+
class Reporter(DjangoObjectType):
80+
class Meta:
81+
model = ReporterModel
82+
fields = ("first_name",)
83+
84+
class Query(ObjectType):
85+
reporters = DjangoListField(Reporter)
86+
87+
schema = Schema(query=Query)
88+
89+
query = """
90+
query {
91+
reporters {
92+
firstName
93+
}
94+
}
95+
"""
96+
97+
result = schema.execute(query)
98+
assert not result.errors
99+
assert result.data == {"reporters": []}
100+
101+
ReporterModel.objects.create(first_name="Tara", last_name="West")
102+
ReporterModel.objects.create(first_name="Debra", last_name="Payne")
103+
104+
result = schema.execute(query)
105+
106+
assert not result.errors
107+
assert result.data == {
108+
"reporters": [{"firstName": "Tara"}, {"firstName": "Debra"}]
109+
}
110+
78111
def test_override_resolver(self):
79112
class Reporter(DjangoObjectType):
80113
class Meta:

0 commit comments

Comments
 (0)