Запрос значения перечисления в GraphQL

Предположим, у меня есть такая модель

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. Как я могу управлять перечислениями в React с клиентом Apollo

По первому вопросу у меня есть этот запрос

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

Это дает мне странное значение состояния, например A_1 и A_2. Я ожидал, что это даст мне какую-то значимую ценность, такую ​​как «Инициировать». Как я могу получить значение перечисления пары kv?

Что касается второго вопроса, если я хочу представить пользователю список возможных значений для этого перечисления, как я могу это сделать?


person Khanetor    schedule 17.11.2016    source источник
comment
У меня тоже есть похожая проблема. Всякий раз, когда я запрашиваю поле с вариантами выбора, оно возвращает значение с заглавной буквы. Но когда я пытаюсь отфильтровать запрос, используя это значение, я получаю сообщение об ошибке \ Выберите допустимый вариант. TEST_VALUE не является одним из доступных вариантов. \, \ Code \: \ invalid_choice \. Это не имеет никакого смысла.   -  person an0o0nym    schedule 26.08.2020


Ответы (1)


Я нашел решение, хотя мне интересно, лучшее ли оно. В дополнение к запросу, который имеет значения перечисления, я включил этот запрос

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

Он извлекает все возможные пары ключ-значение для перечисления OrderState. Затем я могу использовать это как словарь для поиска значений перечисления.

Мне кажется, что этот подход все еще слишком ручной, но нет примеров, которые запрашивают значения перечисления. Они просто остановились на описании того, что такое перечисление и как его объявить.

person Khanetor    schedule 17.11.2016
comment
Есть ли новости о том, как сделать это более автоматическим? Это кажется смешным: а) статически запрашивать каждый из этих типов в запросе или б) динамически запускать тонну запросов для всех требуемых типов. - person rtindru; 12.02.2019