【问题标题】:get_node method is not called未调用 get_node 方法
【发布时间】:2020-01-12 13:20:16
【问题描述】:

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

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

这是我的代码示例

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
  }
}

Graphql 输出

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

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

【问题讨论】:

  • 这里有同样的问题。你解决过这个问题吗?

标签: graphene-python graphene-django


【解决方案1】:

问题在于您传递给查询的id。在docs的某处,埋着这个小字条:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2014-03-04
    • 2019-09-01
    • 2015-10-15
    • 2014-06-26
    • 2020-10-05
    • 2017-09-07
    • 2016-10-30
    • 2016-02-25
    相关资源
    最近更新 更多