石墨烯突变返回400-无法正确传递id字段

时间:2019-10-12 19:00:17

标签: django reactjs graphql graphene-django

我一直在Django中使用带有graphql和React前端的石墨烯。

我可以创建一个create突变,但是不能进行编辑-即使没有$变量的查询在graphiQL中也可以工作

我在React中的gql常量是:

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

id是通过处理程序设置的,表单中的Submit函数如下所示:

<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())

为什么编辑不起作用?

1 个答案:

答案 0 :(得分:1)

您的突变应该像这样

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

此处应为id: $id而不是id: id