问题描述
当我在 Query 类上面添加注释时,它会出错
AssertionError: Type <function Query at 0x104d1dd30> is not a valid ObjectType.
def my_func(f):
@wraps(f)
def my_func_wrap(*args,**kwargs):
//do something
return f(*args,**kwargs)
return my_func_wrap
@my_func
class Query(graphene.ObjectType):
node = relay.Node.Field()
users = graphene.List(lambda: UserSchema)
def resolve_users(self,info):
//do something
return User.query.all()
schema = graphene.Schema(query=Query)
如果我将注释添加到每个解析器,它就可以正常工作。
但我会添加 20 多个解析器,我认为将注释添加到每个解析器并不是一个好主意。
解决方法
是的,你可以。只需创建一个继承自 GraphQLView
的自定义 View 类并覆盖 dispatch
方法,然后使用您自己的视图类作为 graphql 端点处理程序。像这样:
class CustomGraphQLView(GraphQLView):
def dispatch(self,request,*args,**kwargs):
// do something
super(CustomGraphqlView,self).dispatch(request,**kwargs)
如果您想操作查询集本身,我建议使用 graphene-django-extras
并覆盖其查询字段上的 list_resolver
方法(DjangoFilterListField
,DjangoFilterPaginateListField
,... ) 类并使用您自己的自定义类。
您可以在覆盖方法上调用 super 或从其源中复制确切的代码并进行编辑。