在 Graphene python 解析器中调用自定义方法
Posted
技术标签:
【中文标题】在 Graphene python 解析器中调用自定义方法【英文标题】:Calling a custom method in a Graphene python resolver 【发布时间】:2021-10-26 00:38:18 【问题描述】:您好,我只是想避免为每个查询重复代码,我想知道是否可以从解析器内部调用一个方法:
# pseudo code
class Query(graphene.ObjectType):
field = graphene.Field(SomeType)
def do_boring_task(parent, info, arg):
return "I did something"
def resolve_field(parent, info):
did_something = parent.do_boring_task(arg) # <-- is this possible ?
# do something here
return resolved_fields
我总是收到“graphql.error.located_error.GraphQLLocatedError: 'NoneType' object has no attribute 'do_boring_task'”错误
是否可以按照我描述的方式来做,还是应该使用中间件来做?
谢谢
【问题讨论】:
【参考方案1】:从graphene.ObjectType
继承的类与普通类不同,resolve_field
和 do_boring_task
默认为静态方法。
请注意resolve_field
的第一个参数是parent
而不是self
,do_boring_task
是 Query 类的类方法(其他语言中的静态方法)并且在父模式中不存在,这解释了您的错误。
您的问题的快速解决方法如下所示,在类之外定义函数。
def do_boring_task(args):
return "I did something"
class Query(graphene.ObjectType):
field = graphene.Field(SomeType)
def resolve_field(parent, info):
did_something = do_boring_task(arg)
# do something here
return resolved_fields
更多详情请参阅博客中的这些内容
Implicit Static Method
Resolvers Outside the class
【讨论】:
以上是关于在 Graphene python 解析器中调用自定义方法的主要内容,如果未能解决你的问题,请参考以下文章