如何使用 Django 嵌套对象添加 GraphQL 突变?
Posted
技术标签:
【中文标题】如何使用 Django 嵌套对象添加 GraphQL 突变?【英文标题】:How to add GraphQL Mutation with Django Nested Objects? 【发布时间】:2018-01-02 13:17:30 【问题描述】:在我的项目中,我有一个名为 Workflows
的对象,它与另一个名为 DataSources
的对象具有 1:Many 关系。我非常接近能够使用 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))
似乎失败的是提取我希望与我正在创建的新工作流相关联的数据源。我收到一条错误消息,上面写着“不可散列的类型:'dict'”
我不知道这条错误消息到底在暗示我在做什么。
任何想法将不胜感激!
罗伯特
【问题讨论】:
你是怎么解决这个问题的? 【参考方案1】:在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进行整个搜索。
hashable 的一个例子是内置的 int、str、tuple、frozenset。
此上下文中的 dict 是 Graphql 请求。 所以首先检查查询中键的值是否是可散列的。 另外,最好把我请求的查询示例同时放上来。
【讨论】:
datasources = graphene.List(DataSourceInput) 这是不可散列的以上是关于如何使用 Django 嵌套对象添加 GraphQL 突变?的主要内容,如果未能解决你的问题,请参考以下文章
当我使用 Graphene 在 Django GraphQL API 中获取对象时,如何限制 ForeignKey 字段的项目数?
如何删除 Graphene Django 突变查询(中继)中的嵌套输入对象?