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

时间:2017-07-27 02:02:47

标签: django-models graphql graphene-python

在我的项目中,我有一个名为Workflows的对象与另一个名为DataSources的对象有1:多关系。我非常接近能够使用GraphQL Mutation创建新的工作流程。这是相关的代码:

class DataSourceInput(graphene.InputObjectType):
    id = graphene.Int()
    database_name = graphene.String()
    table_name = graphene.String()

    @classmethod
    def get_node(cls, id, context, info):
        node = get_datasource(id)
        return node


class CreateWorkflow(relay.ClientIDMutation):
    class Input:
        name = graphene.String()
        description = graphene.String()
        datasources = graphene.List(DataSourceInput)

    workflow = graphene.Field(Workflow)
    success = graphene.Boolean()
    errors = graphene.String()

    @classmethod
    def mutate_and_get_payload(cls, input, context, info):
        name = input.get('name')
        description = input.get('description')
        datasources = input.get('datasources')

        try:
            workflow = WorkflowModel.create(name, description, datasources)
            return CreateWorkflow(workflow=workflow, success=True)

        except Exception as e:
            success = False
            return CreateWorkflow(workflow=None, success=False, errors=str(e))

似乎失败的是提取我希望与我正在创建的新工作流相关联的DataSource。我收到的错误是“不可用的类型:'dict'”

我不确切地知道这个错误信息暗示我做了什么。

任何想法都会非常感激!

罗伯特

1 个答案:

答案 0 :(得分:0)

在python中,如果将其指定为字典键,则可能会发生错误。 例如。

>>> a = dict()
>>> type(a)
<class 'dict'>
>>> a[[0]] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

在字典中,哈希函数用于响应低成本处理的要求,从而避免在设置和获取值时通过 eq 进行整个搜索。

可哈希的示例是内置的int,str,tuple,frozenset。

在这种情况下,字典是Graphql请求。 因此,请首先检查查询中键的值是否可哈希。 另外,最好同时放置我请求的查询示例。