循环引用包 - Python / Django

时间:2017-03-01 20:18:00

标签: django python-2.7 circular-dependency graphene-python

在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可以接收带子项的输入,并允许嵌套创建以及允许通过创建父项来输入对象。

1 个答案:

答案 0 :(得分:0)

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

import graphene

import graphql.inputs.company


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