查询GraphQL中的枚举值

Kha*_*tor 10 django graphql graphene-python react-apollo

假设我有这样的模型

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
    )
Run Code Online (Sandbox Code Playgroud)

当我将这个模型与其Graphene对象类型的伴侣配对时

class OrderNode(graphene_django.DjangoObjectType):
    class Meta:
        model = Order
        interfaces = (relay.Node,)
Run Code Online (Sandbox Code Playgroud)

OrderState!创建具有名称的枚举类型.

我很关心

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

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

{
  customer(id: "Q3VzdG9tZXJOb2RlOjE=") {
    name
    orders {
      edges {
        node {
          state
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个像A_1和的奇怪的状态值A_2.我期待它给我一些有意义的价值,比如"Initiate".如何获得kv对enum的值?

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

Kha*_*tor 7

我找到了解决方案,但我不知道它是否是最好的解决方案.除了具有枚举值的查询之外,我还包含了此查询

query {
    # previous queries
    __type(name: "OrderState") {
       states: enumValues {
           name
           description
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我觉得这种方法仍然过于手动,但没有例子可以查询枚举值.他们只是停止描述一个枚举是什么,以及如何声明一个.

  • 关于使这更加自动化的任何更新?a) 在查询中静态请求这些类型中的每一种或 b) 对所有必需的类型动态地触发大量查询,这似乎很荒谬 (2认同)