0

I'm trying to make a mutation of user model via graphql (graphene_django). Here is a code sample.

class UserMutation(graphene.Mutation):
  class Arguments:
      email = graphene.String(required=True)
      name = graphene.String(required=True)
      age = graphene.String(required=True)

  user = graphene.Field(UserType)

  def mutate(self, info, email, name, age):
    ok = True
    user = User.objects.get(pk=id)
    user.email = email
    user.name = name
    user.age = age
    user.save()

    return UserMutation(ok=ok, user=user)

class Mutation(graphene.ObjectType):
   create_user = UserMutation.Field()

So, the problem is it doesn't work. When I try to make a mutation:

mutation CreateUser($email: String!, $name: String!, $age: String!) {
  createUser(email: $email, name: $name, age: $age) {
     email
     name
     age
  }
}

Variables are:

{
  "email": "lavrikrom2@gmail.com",
  "name": "Roma",
  "age": "25"
}

It returns me an error:

  {
    "message": "Unknown argument \"email\" on field \"createUser\" of type \"Mutation\".",
    "locations": [
      {
         "line": 33,
         "column": 14
      }
    ]
  }

Or you can see the playground enter image description here

But I specified arguments in mutate function. Does somebody know what I'm doing wrong? Thanks.

Exoriri
  • 327
  • 3
  • 21

1 Answers1

1

So, I figured out what problem was.

I haven't specified on which field I want to make mutation. I my case it was user. So, the right mutation should look like this(with specifying variables, of course):

mutation UserMutation($email: String!, $name: String!, $age: String!) {
  createUser(email: $email, name: $name, age: $age) {
    user {
      email
      name
      age
    }
  }
}

Also, I needed to make some changes in the code as well:

class UserField(graphene.ObjectType): 
   email = graphene.String(required=True)
   name = graphene.String(required=True)
   age = graphene.String(required=True)

class UserMutation(graphene.Mutation):
  class Arguments:
      email = graphene.String(required=True)
      name = graphene.String(required=True)
      age = graphene.String(required=True)

  ok = graphene.Boolean()
  user = graphene.Field(lambda: UserField)

  def mutate(self, info, email, name, age):
    ok = True
    user = User(email=email, name=name, age=age)
    user.save()

    return UserMutation(ok=ok, user=user)
Exoriri
  • 327
  • 3
  • 21