在 GraphQL 中检索对象 ID

alm*_*gra 7 python graphql graphene-python

我想知道是否有可能获得一个对象的“原始 id”作为查询的结果。每当我向服务器发出请求时,它都会返回节点“全局标识符”,类似于U29saWNpdGFjYW9UeXBlOjEzNTkxOA==.

该查询类似于以下查询:

{
  allPatients(active: true) {
    edges {
      cursor
      node {
        id
        state
        name
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

回报是:

{
  "data": {
      "edges": [
        {
          "cursor": "YXJyYXljb25uZWN0aW9uOjA=",
          "node": {
            "id": "U29saWNpdGFjYW9UeXBlOjEzNTkxOA==",
            "state": "ARI",
            "name": "Brad"
          }
        }
      ]
  }
}
Run Code Online (Sandbox Code Playgroud)

如何在数据库级别(例如“112”)而不是该节点唯一标识符获取对象的“原始”ID?

ps:我在服务器端使用graphene-python和Relay。

小智 6

覆盖 Node 对象中的默认 to_global_id 方法对我有用:

class CustomNode(graphene.Node):
    class Meta:
        name = 'Node'

    @staticmethod
    def to_global_id(type, id):
        return id


 class ExampleType(DjangoObjectType):
     class Meta:
         model = Example
         interfaces = (CustomNode,)
Run Code Online (Sandbox Code Playgroud)


小智 3

第一个选项,删除relay.Node作为objectNode声明的接口。

第二个选项,使用自定义的resolve_id函数返回id原始值。

例子

class objectNode(djangoObjectType):

    .... Meta ....

    id = graphene.Int(source="id")

    def resolve_id("commons args ...."):
        return self.id
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你