使用 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
Bar
和 InputObjectType
在继承自 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 实例作为中继突变的输入的主要内容,如果未能解决你的问题,请参考以下文章