Skip to content

Cannot reference Object defined later in file when using DjangoListField #1225

Open
@liliserf

Description

@liliserf

When trying to reference an object that's defined later in the file...

This works:

class Foo(graphene.ObjectType):
    bars = graphene.List(graphene.NonNull(lambda: Bar))


class Bar(graphene.ObjectType):
    baz = graphene.String()

This does not work:

class Foo(graphene.ObjectType):
    bars = DjangoListField(lambda: Bar)


class Bar(graphene.ObjectType):
    baz = graphene.String()

When using DjangoListField it returns:

web_1       | Traceback (most recent call last):
web_1       |   File "/usr/local/lib/python3.9/threading.py", line 954, in _bootstrap_inner
web_1       |     self.run()
web_1       |   File "/usr/local/lib/python3.9/threading.py", line 892, in run
web_1       |     self._target(*self._args, **self._kwargs)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/utils/autoreload.py", line 54, in wrapper
web_1       |     fn(*args, **kwargs)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
web_1       |     self.check(display_num_errors=True)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 387, in check
web_1       |     all_issues = self._run_checks(
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 377, in _run_checks
web_1       |     return checks.run_checks(**kwargs)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/checks/registry.py", line 72, in run_checks
web_1       |     new_errors = check(app_configs=app_configs)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/checks/urls.py", line 13, in check_url_config
web_1       |     return check_resolver(resolver)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/core/checks/urls.py", line 23, in check_resolver
web_1       |     return check_method()
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 399, in check
web_1       |     for pattern in self.url_patterns:
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 80, in __get__
web_1       |     res = instance.__dict__[self.name] = self.func(instance)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 584, in url_patterns
web_1       |     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 80, in __get__
web_1       |     res = instance.__dict__[self.name] = self.func(instance)
web_1       |   File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 577, in urlconf_module
web_1       |     return import_module(self.urlconf_name)
web_1       |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
web_1       |     return _bootstrap._gcd_import(name[level:], package, level)
web_1       |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
web_1       |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
web_1       |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
web_1       |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
web_1       |   File "<frozen importlib._bootstrap_external>", line 855, in exec_module
web_1       |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
web_1       |   File "/usr/src/app/book_club/urls.py", line 10, in <module>
web_1       |     from .club_api.schema import views as graphql_views
web_1       |   File "/usr/src/app/book_club/club_api/schema/views.py", line 8, in <module>
web_1       |     from book_club.app_schema import schema as app_schema
web_1       |   File "/usr/src/app/book_club/app_schema.py", line 5, in <module>
web_1       |     from book_club.club_api.schema import app_mutations, app_queries
web_1       |   File "/usr/src/app/book_club/club_api/schema/app_mutations.py", line 44, in <module>
web_1       |     from .app_objects import (
web_1       |   File "/usr/src/app/book_club/club_api/schema/app_objects.py", line 1012, in <module>
web_1       |     class Foo(graphene.ObjectType):
web_1       |   File "/usr/src/app/book_club/club_api/schema/app_objects.py", line 1013, in Foo
web_1       |     bars = DjangoListField(lambda: Bar)
web_1       |   File "/usr/local/lib/python3.9/site-packages/graphene_django/fields.py", line 32, in __init__
web_1       |     self._underlying_type, DjangoObjectType
web_1       |   File "/usr/local/lib/python3.9/site-packages/graphene_django/fields.py", line 38, in _underlying_type
web_1       |     while hasattr(_type, "of_type"):
web_1       |   File "/usr/local/lib/python3.9/site-packages/graphene/types/structures.py", line 25, in of_type
web_1       |     return get_type(self._of_type)
web_1       |   File "/usr/local/lib/python3.9/site-packages/graphene/types/utils.py", line 45, in get_type
web_1       |     return _type()
web_1       |   File "/usr/src/app/book_club/club_api/schema/app_objects.py", line 1013, in <lambda>
web_1       |     bars = DjangoListField(lambda: Bar)
web_1       | NameError: name 'Bar' is not defined

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions