你好,我只是想避免每个查询重复代码,我想知道我是否可以从解析器内部调用一个方法,如:
# 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。graphqllocateerror: 'NoneType'对象没有属性'do_boring_task'"误差
是否有可能做到我描述的方式,或者这是应该使用中间件完成的事情?
感谢继承自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
更多细节请参阅博客
隐含静态方法
类之外的解析器