如何删除 Graphene Django 突变查询(中继)中的嵌套输入对象?

Posted

技术标签:

【中文标题】如何删除 Graphene Django 突变查询(中继)中的嵌套输入对象?【英文标题】:How to remove the nested input object in the Graphene Django mutation query (Relay)? 【发布时间】: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
    
  

【问题讨论】:

【参考方案1】:

你可以解决这个问题:

class FuelTypeInput(graphene.AbstractType):
    id = graphene.Int()
    label = graphene.String()

class CreateFuelSubType(relay.ClientIDMutation):
    Input = FuelSubtypeInput

    fuel_subtype = Field(FuelSubTypeNode)
    ok = graphene.Boolean()

    # Other Code ...

【讨论】:

以上是关于如何删除 Graphene Django 突变查询(中继)中的嵌套输入对象?的主要内容,如果未能解决你的问题,请参考以下文章

在单个 GraphQL 突变(graphene-django)中返回已删除对象的数组

在 Django GraphQL 中删除突变

Django Graphene 使用多层嵌套外键编写突变

如何在 graphene-django GraphQLTestCase 中使用 django-grahql-jwt 进行身份验证?

如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?

如何使用 Django 嵌套对象添加 GraphQL 突变?