使用 InputObjectType 实例作为中继突变的输入

Posted

技术标签:

【中文标题】使用 InputObjectType 实例作为中继突变的输入【英文标题】:Use an InputObjectType instance as Input for relay mutation 【发布时间】:2020-10-18 06:01:58 【问题描述】:

根据石墨烯文档,如果我们要在实现relay.clientIDMutation 时从用户那里获得输入,那么它需要像这样在 Input 子类下:

class Foo(relay.clientIDMuation):
  class Input:
    arg1 = graphene.String()
    arg2 = graphene.Sring()

# the return parameters and mutate and get payload method after this

但是,我们也可以指定 InputObjectTypes。

class Bar(graphene.InputObjectType):
  arg1 = graphene.String()
  arg2 = graphene.String()

如果我们要使用普通的石墨烯突变对象,您可以在 Arguments 子类中使用指定输入。

class NewFoo(graphene.Mutation):
  class Arguments:
    input = Bar()

  # return arguments and mutate method after this

BarInputObjectType 在继承自 relay.clientIDMutation 时如何用于 NewFoo 突变中的 Input 属性,同时仍然能够将 clientMutationID 作为输入参数传递?

class NewFoo(relay.clientIDMutation):
  class Attribute:
    input = Foo()

# the return parameters and mutate and get payload method after this

注意:我已经尝试添加具有上述输入属性的 Arguments 子类,但是当该类继承自 relay.clientIDMuation 时,这不起作用。

【问题讨论】:

【参考方案1】:

您不需要将class Attribute:relay.clientIDMutation 类一起使用。

试试这个。在启动中继类之前声明这个类。

class Bar(graphene.InputObjectType):
   arg1 = graphene.String()
   arg2 = graphene.String()

在你的接力课中,

class NewFoo(relay.clientIDMutation):
   class Input:
   inputarray = Foo()

你的 Mutation 应该是这样的,

mutation
  NewFoo(input:
      inputarray:
        arg1:"Hello"
        arg2:"world"
        
      
    )
 

尽管您仍然无法将输入数组传递给该字段。

【讨论】:

很抱歉回复晚了,但我最终做了一些非常相似的事情。似乎应该有一种方法可以直接在 Mutation 中提及输入类型。无论如何,谢谢!【参考方案2】:

您可以使用AbstractType

class Bar(graphene.AbstractType):
    arg1 = graphene.String()
    arg2 = graphene.String()

class NewFoo(relay.clientIDMutation):
    Input = Bar

    # Other Code

这样你就可以正确输入

mutation
NewFoo(input:
      arg1:"Hello"
      arg2:"world"
    
  )

编辑:

从 2.0 版本开始,AbstractType 已被弃用:

你只需要创建类

class Bar:
    arg1 = graphene.String()
    arg2 = graphene.String()

【讨论】:

以上是关于使用 InputObjectType 实例作为中继突变的输入的主要内容,如果未能解决你的问题,请参考以下文章

具有多 InputObjectType 的石墨烯突变

GraphQL:具有标量和 InputObjectType 的 UnionType

JavaScript中继承方式详解

[原创][教程] 如何设置极2路由器 作为 有线中继 使用

使用外部消息代理作为代理中继的 Spring

配置设备作为DHCP中继(中继与服务器处于同一网络)