在 Graphene python 解析器中调用自定义方法

Calling a custom method in a Graphene python resolver

你好,我只是想避免为每个查询重复代码,我想知道我是否可以从解析器内部调用这样的方法:

# 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' 对象没有属性 'do_boring_task'”错误

是否可以按照我描述的方式来做,或者这是应该使用中间件来完成的事情吗?

谢谢

类 继承自 graphene.ObjectType 不同于普通的 class,resolve_fielddo_boring_task 默认是静态方法。

注意resolve_field的第一个参数是parent而不是selfdo_boring_task是class方法(其他语言的静态方法)查询 class 并且在父架构中不存在,这解释了您的错误。

您的问题的快速解决方案如下所示,在 class.

之外定义函数
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