Django Graphene Mutation如何定义接收任意对象的无校验输入字段
Graphene 支持任意结构payload字段配置方法
GraphQL本身是强类型系统,没有原生的任意类型支持,要实现无校验接收动态结构的payload,直接用Graphene内置的GenericScalar标量就行。这个类型支持接收所有合法JSON值:嵌套对象、数组、字符串、数字、布尔、null都能接,完全不会校验内部结构,刚好符合你的需求。
具体实现代码
先导入对应标量类型,直接给payload字段指定类型即可:
import graphene from graphene.types.generic import GenericScalar # 按项目原有逻辑导入MutationMixin、relay等依赖 class SendEvent(MutationMixin, relay.ClientIDMutation): class Input: event = graphene.String(required=True) # payload配置为GenericScalar,支持传入任意结构对象 payload = GenericScalar(required=True) # required参数可根据业务需求自行决定是否添加 @classmethod def mutate_and_get_payload(cls, root, info, event, payload, **kwargs): # 此处拿到的payload就是前端传入的原生Python结构(字典/列表/基础值等) # 直接写存储逻辑即可,比如存入模型的JSONField # 自定义业务逻辑 return SendEvent(...)
补充说明
GenericScalar不会对payload的内部字段、嵌套结构做任何校验,不管传入多复杂的嵌套对象、混合类型数组都可以正常解析接收。- Graphene 2.0及以上的主流版本都内置了这个标量类型,不需要额外安装第三方依赖。
内容的提问来源于stack exchange,提问作者domanskyi
相关产品推荐
相关产品推荐

