0

我正在尝试使用 github 存储库代码中给出的星球大战示例来了解接口的工作原理。执行简单查询会导致 AssertionError

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

AssertionError:类型 Droid 与关联的石墨烯类型 Droid 不匹配。

在花了很多时间寻找这个问题的解决方案后,我找不到正确的答案。相关文件在 github 存储库路径中给出:examples/starwars/data.py examples/starwars/schema.py

请帮忙。

4

1 回答 1

0

通过深入研究 Interfaces on Graphene 和 Ariadne 文档找到了答案。它需要将接口的分辨率指定为相关的数据类型。在 Starwars 示例中,角色必须分解为人类或机器人。这需要添加一个类方法,如下所示:

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]

代码现在可以工作了!

于 2020-03-09T19:10:02.443 回答