在GraphQL实现过程中,我发现自己做了很多循环引用来保持包模块化。请考虑以下文件夹结构。
project/
__init__.py
graphql/
__init__.py
inputs/
__init__.py
company.py
contact.py
company.py
import graphene
import graphql.inputs.contact
class CompanyInput(graphene.InputObjectType):
contacts = graphene.List(graphql.inputs.contacts.ContactInput)
...
contact.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可以接收带子项的输入,并允许嵌套创建以及允许通过创建父项来输入对象。
答案 0 :(得分:0)
找出解决此问题的方法。在 contact.py 中,我使用lambda加载了CompanyInput,如下所示:
import graphene
import graphql.inputs.company
class ContactInput(graphene.InputObjectType):
company = graphene.Field(lambda: graphql.inputs.company.CompanyInput)