AssertionError: The type Droid does not match with the associated graphene type Droid
AssertionError: The type Droid does not match with the associated graphene type Droid
我正在尝试使用 github 存储库代码中给出的星球大战示例来了解接口的工作原理。
执行一个简单的查询会导致 AssertionError
query = """query HeroNameQuery { hero { name } }"""
AssertionError:类型 Droid 与关联的石墨烯类型 Droid 不匹配。
我花了很多时间搜索此问题的解决方案后,找不到正确的答案。
相关文件在 github 存储库路径中给出:
examples/starwars/data.py
examples/starwars/schema.py
请帮忙。
通过深入研究 Interfaces on Graphene 和 Ariadne 文档找到了答案。
它需要将接口指定为相关数据类型的解析。
在 Starwars 示例中,角色必须解析为 Human 或 Droid。这需要添加一个类方法,如下所示:
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]
代码现在可以工作了!
我正在尝试使用 github 存储库代码中给出的星球大战示例来了解接口的工作原理。 执行一个简单的查询会导致 AssertionError
query = """query HeroNameQuery { hero { name } }"""
AssertionError:类型 Droid 与关联的石墨烯类型 Droid 不匹配。
我花了很多时间搜索此问题的解决方案后,找不到正确的答案。 相关文件在 github 存储库路径中给出: examples/starwars/data.py examples/starwars/schema.py
请帮忙。
通过深入研究 Interfaces on Graphene 和 Ariadne 文档找到了答案。 它需要将接口指定为相关数据类型的解析。 在 Starwars 示例中,角色必须解析为 Human 或 Droid。这需要添加一个类方法,如下所示:
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]
代码现在可以工作了!