如何解决Django Graphene项目报错module 'graphene' has no attribute 'string'
问题解决方法
你的错误和配置无关,是代码编写时的语法错误导致schema导入失败,具体错误点和修正方案如下:
错误点1:类型名大小写错误
报错提示module 'graphene' has no attribute 'string'直接指向的问题是:你在应用内schema.py的TodoCreate参数定义中,把graphene.String写成了全小写的graphene.string,graphene所有内置类型名均为首字母大写格式。
错误点2:参数名大小写错误
你定义字段必填时写的Required=True首字母大写,graphene的必填参数为全小写的required=True。
错误点3:类命名冲突(隐藏问题)
你应用内的Mutation类命名为Mutation,根目录的schema.py里的Mutation类也叫Mutation,导入时会出现命名冲突,建议调整应用内的Mutation类名避免覆盖。
修正后的代码片段:
应用内schema.py修改部分
# create todo class TodoCreate(graphene.Mutation): class Arguments: # 修正类型名大小写、参数名大小写 title = graphene.String(required=True) text = graphene.String(required=True) todo = graphene.Field(TodoType) def mutate(root, info, title, text): # userId = info.context.user user = User.objects.get(id=2) todo = TodoList(userId=user, title=title, text=text) todo.save() return TodoCreate(todo=todo) # 调整类名避免和根schema的Mutation重名 class TodoMutation(graphene.ObjectType): createTodo = TodoCreate.Field()
根schema.py修改部分
# 导入调整后的TodoMutation class Query(TodoQuery, graphene.ObjectType): pass # 继承重命名后的TodoMutation,避免命名冲突 class Mutation(TodoMutation, graphene.ObjectType): pass schema = graphene.Schema(query=Query, mutation=Mutation)
修改后重启服务即可解决报错。
内容的提问来源于stack exchange,提问作者M N Tushar
相关产品推荐
相关产品推荐

