Django Graphene,传递 JSON 或 dict 数据作为 Mutation 的输入

Ica*_*rim 5 django graphene-python graphiql

我有以下情况:我有一个用户,每个用户都有一个库存。我正在努力在 Mutation“CreateUser”中声明用户的库存。以下是用于创建用户的以下更改:

mutation Create{
  addUser(UserData:{name:"Shibunika",age:21}
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在此突变中声明用户的库存,我期望类似

mutation Create{
  addUser(UserData:{name:"Shibunika",age:21,inventory:{'item1':45,'item2':25}
}s
Run Code Online (Sandbox Code Playgroud)

这些数字是每个项目的数量。我如何在石墨烯中定义这些输入?你会轻轻地给我看一个模式吗?

Mar*_*ian 10

您可以创建一个自定义对象类型来表示一个键值对,然后在您的用户架构中列出这些对象类型。

class InventoryKeyValueType(graphene.InputObjectType):
    name = graphene.String(required=True)
    int_value = graphene.Int(required=True)

class AddUser(graphene.Mutation):
    user = graphene.Field(lambda: UserType)
    ok = graphene.Boolean()

    class Arguments:
        # User Fields
        name = graphene.String()
        ....

        inventory = graphene.List(InventoryKeyValueType)
Run Code Online (Sandbox Code Playgroud)

语法有点笨拙但可行:

mutation { addUser(name:"Shibunika", age:21, inventory:[ {name: "item1", intValue: 45}, {name: "item2", intValue:25}]){ok}

其他输入类型

这种方法可以很容易地扩展到整数以外的其他输入类型,例如替换

    int_value = graphene.Int(...
Run Code Online (Sandbox Code Playgroud)

    str_value = graphene.String(...
Run Code Online (Sandbox Code Playgroud)