石墨烯突变返回 400 - 不会正确传递 id 字段
Posted
技术标签:
【中文标题】石墨烯突变返回 400 - 不会正确传递 id 字段【英文标题】:graphene mutation returns 400 - won't pass id field properly 【发布时间】:2020-02-09 22:34:28 【问题描述】:我一直在 django 中使用带有 graphql 和 React 前端的石墨烯。
我可以让创建突变工作,但编辑不会 - 即使没有 $ 变量的查询在 graphiQL 中工作
我在 React 中的 gql const 是:
export const EDIT_PERSON = gql`
mutation personEdit($id: id, $input: PersonInputType!)
personEdit(id: id, input: $input)
person
id
`;
id 是从处理程序中设置的,表单中的提交函数如下所示:
<form
autoComplete="off"
onSubmit=e =>
e.preventDefault();
editPerson(
variables:
id: id,
input:
firstName: firstName,
lastName: lastName,
address: address
);
>
我在 django 中的 PersonEdit 突变看起来像:
class PersonEdit(Mutation):
class Arguments:
id = ID(required=True)
input = PersonEditInputType(required=True)
person = Field(PersonType)
@classmethod
def mutate(cls, root, info, **data):
serializer = PersonSerializer(data=data.get('input'))
serializer.is_valid(raise_exception=True)
person = Person.objects.get(id=data.get('id'))
print("PERSON", serializer.data)
person.first_name = serializer.data['first_name']
person.last_name = serializer.data['last_name']
person.address = serializer.data['address']
return PersonEdit(person=person.save())
为什么编辑不起作用?
【问题讨论】:
400 表示查询格式错误或验证失败。在浏览器的 DevTools 的“网络”选项卡中检查您从服务器获得的实际响应,以了解有关请求问题的详细信息。 是的,但为什么呢?这是因为第 4 个 id 前面没有 $ 【参考方案1】:你的变异应该是这样的
export const EDIT_PERSON = gql`
mutation personEdit($id: ID!, $input: PersonInputType!)
personEdit(id: $id, input: $input)
person
id
`;
这里应该是id: $id
而不是id: id
。
【讨论】:
以上是关于石墨烯突变返回 400 - 不会正确传递 id 字段的主要内容,如果未能解决你的问题,请参考以下文章