【问题标题】:Query for enum value in GraphQL在 GraphQL 中查询枚举值
【发布时间】:2017-03-31 22:17:30
【问题描述】:

假设我有一个这样的模型

class Order(models.Model):
    STATES = [
        (1, 'Initiate'),
        (2, "Brief"),
        (3, "Planning"),
        (4, "Price Negotiate"),
        (5, "Executing"),
        (6, "Pending"),
        (7, "Completed"),
        (8, "Canceled"),
        (9, "Failed"),
        (10, "Paid"),
    ]

    state = models.PositiveSmallIntegerField(
        choices=STATES,
        default=1
    )

当我将此模型与其 Graphene 对象类型伴侣配对时

class OrderNode(graphene_django.DjangoObjectType):
    class Meta:
        model = Order
        interfaces = (relay.Node,)

创建了一个名为OrderState! 的枚举类型。

我很担心

  1. 如何查询枚举
  2. 如何使用 Apollo 客户端管理 React 中的枚举

对于第一个问题,我有这个查询

{
  customer(id: "Q3VzdG9tZXJOb2RlOjE=") {
    name
    orders {
      edges {
        node {
          state
        }
      }
    }
  }
}

它给了我一个奇怪的状态值,比如 A_1A_2。我期待它能给我一些有意义的价值,比如“Initiate”。如何获取 kv 对枚举的值?

对于第二个问题,如果我想向用户展示此枚举的可能值列表,我该怎么做?

【问题讨论】:

  • 我也有类似的问题。每当我查询带有选项的字段时,它都会返回大写的值。但是当我尝试使用该值过滤查询时,我收到错误“选择一个有效的选择。TEST_VALUE 不是可用的选择之一。\”,\“代码\”:\“invalid_choice\”。这没有任何意义。

标签: django graphql react-apollo graphene-python


【解决方案1】:

我找到了一个解决方案,但我想知道它是否是最好的。除了具有枚举值的查询之外,我还包括了这个查询

query {
    # previous queries
    __type(name: "OrderState") {
       states: enumValues {
           name
           description
       }
    }
}

它为OrderState 枚举提取所有可能的键值对。然后我可以将其用作字典来查找枚举值。

我觉得这种方法还是太手动了,但是没有例子可以查询枚举值。他们只是停止描述枚举是什么,以及如何声明枚举。

【讨论】:

  • 关于使这更加自动化的任何更新? a) 在查询中静态请求这些类型中的每一种,或者 b) 为所有必需的类型动态触发大量查询,这似乎都很荒谬
猜你喜欢
  • 2022-01-20
  • 2022-10-23
  • 2016-04-23
  • 2018-08-17
  • 2019-06-06
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多