【发布时间】:2020-05-19 11:17:39
【问题描述】:
我想在 Relay 中创建一个 Mutation。我正在使用 InputObjectType 模式来分离输入并使其可重用。 在突变类中,我使用 Input 类,并且在那里传递 InputObjectType
通常它可以工作,但客户端的最终查询非常难看。 我需要以这种方式传递参数
query( input : { input : { ...arguments } } )
说实话,我不喜欢它。我觉得它看起来很丑。
所以问题是:是否可以避免大量使用这些 input 对象? 可以使用 1 个 input 对象,但嵌套的对象是多余的,我想避免使用它。
感谢您的帮助!
这是一个例子
class FuelTypeInput(graphene.InputObjectType):
id = graphene.Int()
label = graphene.String()
class FuelSubtypeInput(graphene.InputObjectType):
id = graphene.ID()
label = graphene.String()
fuel_type = graphene.Field(FuelTypeInput)
class CreateFuelSubType(relay.ClientIDMutation):
class Input:
input = FuelSubtypeInput(required=True)
fuel_subtype = Field(FuelSubTypeNode)
ok = graphene.Boolean()
def mutate_and_get_payload(root, info, input):
label = input.label
fuel_type = FuelType.objects.get(pk=input.fuel_type.id)
fuel_subtype = FuelSubType(label=label, fuel_type=fuel_type)
ok = True
return CreateFuelSubType(fuel_subtype=fuel_subtype, ok=ok)
变异查询是:
mutation MyMutations {
createFuelSubtype( input: { input : { label: "Mutation Subtype", fuelType: {
id: 3
}} } ) {
fuelSubtype {
label
}
ok
}
}
效果很好,结果如下。但我想删除嵌套的 input 东西
{
"data": {
"createFuelSubtype": {
"fuelSubtype": {
"label": "Mutation Subtype"
},
"ok": true
}
}
}
【问题讨论】:
标签: graphql graphene-python mutation graphene-django