0

在 GraphQL 实现的过程中,我发现自己做了很多循环引用来保持包的模块化。考虑以下文件夹结构。

project/
__init__.py

    graphql/
    __init__.py

        inputs/
        __init__.py

        company.py
        contact.py

公司.py

import graphene

import graphql.inputs.contact


class CompanyInput(graphene.InputObjectType):
    contacts = graphene.List(graphql.inputs.contacts.ContactInput)
    ...

联系人.py

import graphene

import graphql.inputs.company


class ContactInput(graphene.InputObjectType):
    company = graphql.inputs.company.CompanyInput()

我一直收到 Django 错误:

 ImportError at /api/v2/
 Could not import 'gql.schema.schema' for Graphene setting 'SCHEMA'. AttributeError: 'module' object has no attribute 'company'.

这种循环引用可能吗?联系人和公司都需要能够引用单独包中定义的输入对象类。这样,graphql 可以接受带有子元素的输入,并允许嵌套创建以及允许在创建父对象时输入对象。

4

1 回答 1

0

想出了解决这个问题的方法。在contact.py中,我使用 lambda 延迟加载 CompanyInput,如下所示:

import graphene

import graphql.inputs.company


class ContactInput(graphene.InputObjectType):
    company = graphene.Field(lambda: graphql.inputs.company.CompanyInput)
于 2017-03-01T21:15:45.160 回答