AssertionError: тип Droid не совпадает с ассоциированным типом Droid графена - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь понять работу интерфейсов, используя пример starwars, приведенный в коде репозитория github. Выполнение простого запроса приводит к AssertionError

query = """query HeroNameQuery { hero { name } }"""

AssertionError: тип Droid не совпадает со связанным типом графена Droid.

После того, как вы потратили много времени на поиск разрешения В этом вопросе я не смог найти правильный ответ. Соответствующие файлы приведены по пути к хранилищу github: examples / starwars / data.py examples / starwars / schema.py

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 марта 2020

Нашел ответ, углубившись в документацию по интерфейсам в графене и ариадне. Требуется указание разрешения интерфейса в связанном типе данных. В примере Звездных войн, Персонажа нужно было преобразовать в Человека или Дроида. Для этого необходимо добавить метод класса следующим образом:

class Character(graphene.Interface):
id = graphene.ID()
name = graphene.String()
friends = graphene.List(lambda: Character)
appears_in = graphene.List(Episode)

@classmethod
def resolve_type(cls, instance, info):
    if isinstance(cls, Droid):
        return Droid
    else:
        return Human

def resolve_friends(self, info):
    # The character friends is a list of strings
    return [get_character(f) for f in self.friends]

Код работает сейчас!

...