首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GraphQL中检索对象ID

在GraphQL中检索对象ID
EN

Stack Overflow用户
提问于 2017-09-29 21:49:57
回答 4查看 2.3K关注 0票数 7

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

该查询类似于下面的查询:

代码语言:javascript
复制
{
  allPatients(active: true) {
    edges {
      cursor
      node {
        id
        state
        name
      }
    }
  }

返回的结果是:

代码语言:javascript
复制
{
  "data": {
      "edges": [
        {
          "cursor": "YXJyYXljb25uZWN0aW9uOjA=",
          "node": {
            "id": "U29saWNpdGFjYW9UeXBlOjEzNTkxOA==",
            "state": "ARI",
            "name": "Brad"
          }
        }
      ]
  }
}

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

附言:我在服务器端使用了graphene-python和Relay。

EN

回答 4

Stack Overflow用户

发布于 2018-11-20 05:00:24

在Node对象中覆盖默认的to_global_id方法是为我设计的:

代码语言:javascript
复制
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,)
票数 6
EN

Stack Overflow用户

发布于 2018-06-29 21:11:26

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

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

示例

代码语言:javascript
复制
class objectNode(djangoObjectType):

    .... Meta ....

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

    def resolve_id("commons args ...."):
        return self.id

希望能有所帮助

票数 3
EN

Stack Overflow用户

发布于 2020-03-10 05:06:55

为了对最上面的答案和那些使用SQLAlchemy对象类型的人进行扩展,这对我很有效:

代码语言:javascript
复制
class CustomNode(graphene.Node):
    class Meta:
        name = 'myNode'

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

class ExampleType(SQLAlchemyObjectType):
    class Meta:
        model = Example
        interfaces = (CustomNode, )

如果您有其他使用relay.Node作为接口的ObjectTypes,则需要在您的CustomNode下使用唯一名称。否则,您将得到和断言错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46490229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档