словарь графена graphql как тип

Я новичок в графене, и я пытаюсь сопоставить следующую структуру с типом объекта и вообще безуспешно

    {
  "details": {
    "12345": {
      "txt1": "9",
      "txt2": "0"
    },
    "76788": {
      "txt1": "6",
      "txt2": "7"
    }
  }
}

Любое руководство высоко ценится
Спасибо


person Asce4s    schedule 25.09.2017    source источник
comment
некоторая дополнительная информация о том, какие проблемы у вас возникают, и пример кода, в котором возникают эти проблемы, были бы полезны. Нам действительно нечего делать с этим приятелем.   -  person somada141    schedule 14.04.2018
comment
github.com/graphql-python/graphene/issues/ Использование GenericScalar делает свою работу   -  person danish_wani    schedule 19.03.2021


Ответы (2)


Непонятно, чего вы пытаетесь достичь, но (насколько я знаю) у вас не должно быть произвольных имен ключей / значений при определении схемы GraphQL. Если вы хотите определить словарь, он должен быть явным. Это означает, что для «12345» и «76788» должны быть определены ключи. Например:

class CustomDictionary(graphene.ObjectType):
    key = graphene.String()
    value = graphene.String()

Теперь, чтобы реализовать схему, подобную той, которую вы просите, вам сначала нужно определить соответствующие классы с помощью:

# Our inner dictionary defined as an object
class InnerItem(graphene.ObjectType):
    txt1 = graphene.Int()
    txt2 = graphene.Int()

# Our outer dictionary as an object
class Dictionary(graphene.ObjectType):
    key = graphene.Int()
    value = graphene.Field(InnerItem)

Теперь нам нужен способ разбить словарь на эти объекты. Используя свой словарь, вот пример того, как это сделать:

class Query(graphene.ObjectType):

    details = graphene.List(Dictionary)  
    def resolve_details(self, info):
        example_dict = {
            "12345": {"txt1": "9", "txt2": "0"},
            "76788": {"txt1": "6", "txt2": "7"},
        }

        results = []        # Create a list of Dictionary objects to return

        # Now iterate through your dictionary to create objects for each item
        for key, value in example_dict.items():
            inner_item = InnerItem(value['txt1'], value['txt2'])
            dictionary = Dictionary(key, inner_item)
            results.append(dictionary)

        return results

Если мы запросим это с помощью:

query {
  details {
    key
    value {
      txt1
      txt2
    }
  }
}

Мы получаем:

{
  "data": {
    "details": [
      {
        "key": 76788,
        "value": {
          "txt1": 6,
          "txt2": 7
        }
      },
      {
        "key": 12345,
        "value": {
          "txt1": 9,
          "txt2": 0
        }
      }
    ]
  }
}
person Tobe E    schedule 24.07.2018

Теперь вы можете использовать graphene.types.generic.GenericScalar

Ссылка: https://github.com/graphql-python/graphene/issues/384 < / а>

person Thomas Lupin    schedule 23.06.2020