graphql - 如何删除 Graphene Django 突变查询(中继)中的嵌套输入对象?
问题描述
我想在中继中创建一个突变。我正在使用InputObjectType模式来分离输入并使其可重用。在突变类中,我正在使用Input类,并且我正在传递 InputObjectType
一般来说,它可以工作,但客户端的最终查询非常难看。我需要以这种方式传递参数
query( input : { input : { ...arguments } } )
老实说,我不喜欢它。我觉得它看起来很丑。
所以问题是:是否可以避免大量使用这些输入对象? 可以使用 1 个输入对象,但嵌套的输入对象是多余的,我想避免使用它。
谢谢你的帮助!
这是示例
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
}
}
它工作正常,这是结果。但我想删除嵌套输入的东西
{
"data": {
"createFuelSubtype": {
"fuelSubtype": {
"label": "Mutation Subtype"
},
"ok": true
}
}
}
解决方案
你可以解决这个问题:
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 ...
推荐阅读
- elasticsearch - 使用 copy_to 突出显示弹性搜索
- apache-zeppelin - Apache Zeppelin,已删除的笔记本
- angular - Angular 5 HTTPClient 基本授权不起作用
- css - 如何使用 bootstrap 4 获得折叠菜单后面的徽章?
- git - 使用 maven-scm-plugin 的 Git 更新失败
- ruby-on-rails - 如何验证服务器 SSL 证书?
- java - CRUD Swing - 请求插入
- react-native - react-native-maps - 使用 2 个参数调用 AIRGoogleMapManager.pointForCoordinate 但需要 3 个参数
- php - 在自定义小部件中为变量添加值
- javascript - 量角器承诺 getText()