Python 如何使用石墨烯sqlalchemy SQLAlchemyConnectionField与多对多关联?

Python 如何使用石墨烯sqlalchemy SQLAlchemyConnectionField与多对多关联?,python,graphql,graphene-sqlalchemy,Python,Graphql,Graphene Sqlalchemy,我正在使用graphene sqlalchemy为我的数据库创建一个api,并希望在整个api中有一致的感觉。从这个意义上说,顶级查询使用edges{node{}语法来查询api。但是,我在尝试为多对多关系实现此功能时遇到了一个问题 使用下面定义的graphene类型,我可以让api从数据库返回所有适当的值,但是,底层关系(event_实例和component_实例)不使用edges{node{}的graphql连接字段语法,而只返回一个列表。查询如下所示 #[components.py] 类C

我正在使用
graphene sqlalchemy
为我的数据库创建一个api,并希望在整个api中有一致的感觉。从这个意义上说,顶级查询使用
edges{node{}
语法来查询api。但是,我在尝试为多对多关系实现此功能时遇到了一个问题

使用下面定义的graphene类型,我可以让api从数据库返回所有适当的值,但是,底层关系(
event_实例
component_实例
)不使用
edges{node{}
的graphql连接字段语法,而只返回一个列表。查询如下所示

#[components.py]
类ComponentInstanceType(SQLAlchemyObject类型):
类元:
模型=组件实例模型
接口=(relay.Node,)
event\u instances=List(“api\u core.graphql.types.events.EventInstanceType”)
#[events.py]
类EventInstanceType(SQLAlchemyObject类型):
类元:
模型=事件实例模型
接口=(relay.Node,)
component_instances=List(“api_core.graphql.types.components.ComponentInstanceType”)
#[查询.py]
类EventQuery(对象类型):
node=relay.node.Field()
所有事件实例=SQLAlchemyConnectionField(
EventInstanceType.connection
)
我能够完成我想要的结构,如下所示

query {
    allEventInstances {
        edges {
            node {
                id
                componentInstances {
                    edges {
                        node {
                            id
                        }
                    }
                }
            }
        }
    }
}
通过改变

component\u instances=List(“api\u core.graphql.types.components.ComponentInstanceType”)

component\u instances=SQLAlchemyConnectionField(ComponentInstanceType.connection)

在定义
EventInstanceType
类之前导入
ComponentInstanceType
。但是,我无法对
ComponentInstanceType
类执行相同的操作,因为尚未定义
EventInstanceType

是否仍然可以执行此类类的“惰性定义”并访问
.connection
属性?我知道向前引用,比如
“api\u core.graphql.types.components.components.ComponentInstanceType”
是有效的,因为我正在尝试访问
。连接
它正在崩溃

query {
    allEventInstances {
        edges {
            node {
                id
                componentInstances {
                    edges {
                        node {
                            id
                        }
                    }
                }
            }
        }
    }
}