2017-03-01 17 views
0

GraphQL実装の過程で、私はパッケージをモジュラーに保つために多くの循環参照を作成しています。次のフォルダ構造を考えてみましょう。循環参照パッケージ - Python/Django

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

この問題を回避する方法を考え出しました。 contact.pyラムダを使用してCompanyInputを次のように遅延ロードしました。

import graphene 

import graphql.inputs.company 


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