首页 > 解决方案 > 未调用 get_node 方法

问题描述

get_node 在 django 对象类型定义中遇到方法问题。在我的情况下似乎没有调用该方法。

我什至尝试pdb通过在方法内暂停执行来进行调试get_node,但也没有用。

这是我的代码示例

class DocumentGQL(DjangoObjectType):
    class Meta:
        model = Document
        interfaces = (graphene.relay.Node,)

    @classmethod
    def get_node(cls, info, id):
        logger.info(id)
        ...

class Query(graphene.ObjectType):
    document = graphene.relay.Node.Field(DocumentGQL)

和控制台输出 "POST /graphql/ HTTP/1.1" 200 26

Graphql 查询

{
  document(id:"e551a1e5-6fae-47c2-be87-3feeb802bf7f"){
    description
    id
  }
}

图形输出

{
  "data": {
    "document": null
  }
}

我相信我在执行此操作时遵循了文档。我错过了什么吗?请协助。

标签: graphene-pythongraphene-django

解决方案


问题在于id您要传递给查询。在docs的某个地方,埋藏着这个小便条:

id查询时类型返回的将Ship是一个标量,其中包含足够的信息让服务器知道它的类型和它的 id。

例如,当您查询实例时,实例Ship(id=1)U2hpcDox作为 id 返回(这是 的 base64 编码Ship:1,如果我们以后想通过其 id 查询节点,这可能会很有用。

所以基本上,如果id您的文档是e551a1e5-6fae-47c2-be87-3feeb802bf7f,那么进行查询的正确方法是在查询中提供一个 id RG9jdW1lbnQ6ZTU1MWExZTUtNmZhZS00N2MyLWJlODctM2ZlZWI4MDJiZjdm=。当然上面只是简单的输出:

echo -n 'Document:e551a1e5-6fae-47c2-be87-3feeb802bf7f' | base64

我希望这会有所帮助。我和你在同一条船上。


推荐阅读