【问题标题】:graphene mutation returns 400 - won't pass id field properly石墨烯突变返回 400 - 不会正确传递 id 字段
【发布时间】: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 前面没有 $

标签: django reactjs graphql graphene-django


【解决方案1】:

你的变异应该是这样的

export const EDIT_PERSON = gql`
  mutation personEdit($id: ID!, $input: PersonInputType!) {
  personEdit(id: $id, input: $input) {
    person {
      id
    }
   }
 }
`;

这里应该是id: $id 而不是id: id

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 2020-09-01
    • 2017-03-18
    • 1970-01-01
    • 2018-12-06
    • 2019-01-19
    • 2021-12-17
    • 2022-01-17
    • 2020-06-16
    相关资源
    最近更新 更多