From d38abafd9ca902373dbf384996ab4034af6c5a33 Mon Sep 17 00:00:00 2001 From: Jason Kraus Date: Fri, 13 Nov 2020 15:19:23 -0800 Subject: [PATCH] fix( DjangoListField ): test that default functionality should resolve/call queryset at view time, first attempt at solution --- graphene_django/fields.py | 4 ++-- graphene_django/tests/test_fields.py | 33 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/graphene_django/fields.py b/graphene_django/fields.py index 78efceb..d2c6a52 100644 --- a/graphene_django/fields.py +++ b/graphene_django/fields.py @@ -44,7 +44,7 @@ class DjangoListField(Field): return self._underlying_type._meta.model def get_default_queryset(self): - return self.model._default_manager.get_queryset() + return self.model._default_manager # .get_queryset() @staticmethod def list_resolver( @@ -52,7 +52,7 @@ class DjangoListField(Field): ): queryset = maybe_queryset(resolver(root, info, **args)) if queryset is None: - queryset = default_queryset + queryset = maybe_queryset(default_queryset) if isinstance(queryset, QuerySet): # Pass queryset to the DjangoObjectType get_queryset method diff --git a/graphene_django/tests/test_fields.py b/graphene_django/tests/test_fields.py index 57f913e..f68470e 100644 --- a/graphene_django/tests/test_fields.py +++ b/graphene_django/tests/test_fields.py @@ -75,6 +75,39 @@ class TestDjangoListField: "reporters": [{"firstName": "Tara"}, {"firstName": "Debra"}] } + def test_list_field_queryset_is_not_cached(self): + class Reporter(DjangoObjectType): + class Meta: + model = ReporterModel + fields = ("first_name",) + + class Query(ObjectType): + reporters = DjangoListField(Reporter) + + schema = Schema(query=Query) + + query = """ + query { + reporters { + firstName + } + } + """ + + result = schema.execute(query) + assert not result.errors + assert result.data == {"reporters": []} + + ReporterModel.objects.create(first_name="Tara", last_name="West") + ReporterModel.objects.create(first_name="Debra", last_name="Payne") + + result = schema.execute(query) + + assert not result.errors + assert result.data == { + "reporters": [{"firstName": "Tara"}, {"firstName": "Debra"}] + } + def test_override_resolver(self): class Reporter(DjangoObjectType): class Meta: