es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo manejar múltiples registros en una mutación de actualización de GraphQL Django

El siguiente método actualiza un solo registro de empleado, ¿cómo se maneja lo mismo para múltiples registros de empleados al mismo tiempo?

{
(id : 1, firstName : "John", lastName: "Snow"),
(id : 2, firstName : "Tryrion", lastName: "Lannister")
(id : 3, firstName : "Jammie", lastName: "Lannister")
}

Soy nuevo en django y graphql, por favor ayúdeme con el código y la consulta para lo mismo.

class UpdateEmp(graphene.Mutation):
    emp = graphene.Field(EmployeeType)

class Arguments:
    id = graphene.Int(required=True)
    first_name = graphene.String()
    last_name = graphene.String()

@login_required
def mutate(self, info,**kwargs):
    emp = Employee.objects.get(id=kwargs.get('id'))
    emp.first_name=kwargs.get('first_name')
    emp.last_name=kwargs.get('last_name')
    emp.save()
    return UpdateEmp(emp=emp)

graphql

mutation{
  uopdatemp(id : 1, firstName : "john", lastName: "Snow")
  {
    Employee{
      id
      firstName
      lastName
    }

  }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar varios registros de empleados al mismo tiempo, puede modificar la mutación UpdateEmp para aceptar una lista de argumentos utilizando el tipo List proporcionado por graphene, como se muestra a continuación:

    class UpdateEmp(graphene.Mutation):
        emp = graphene.List(EmployeeType)
    
        class Arguments:
            emp_data = graphene.List(graphene.NonNull(EmpData))
    
        @login_required
        def mutate(self, info, emp_data):
            emps = []
            for data in emp_data:
                emp = Employee.objects.get(id=data.id)
                emp.first_name = data.first_name
                emp.last_name = data.last_name
                emp.save()
                emps.append(emp)
            return UpdateEmp(emp=emps)
    

    Aquí, definimos un nuevo tipo de entrada EmpData que contiene los campos id, firstName y lastName para un empleado. También reemplazamos el tipo Field con el tipo List para devolver varios empleados actualizados.

    En el método mutate, recorremos la lista emp_data, recuperamos el objeto Employee correspondiente basándonos en su id, actualizamos su nombre y apellido, guardamos los cambios en la base de datos y lo agregamos a una lista de empleados actualizados. Finalmente, devolvemos esta lista como el campo emp de la mutación.

    Para actualizar varios empleados utilizando esta mutación, podemos pasar una lista de objetos EmpData como argumento emp_data en la mutación de GraphQL, de la siguiente manera:

    mutation {
      updateEmp(empData: [
        {id: 1, firstName: "John", lastName: "Snow"},
        {id: 2, firstName: "Tyrion", lastName: "Lannister"},
        {id: 3, firstName: "Jaime", lastName: "Lannister"}
      ]) {
        emp {
          id
          firstName
          lastName
        }
      }
    }
    

    Esta mutación actualizará los campos firstName y lastName para los empleados con los id 1, 2 y 3 en la base de datos, y devolverá una lista de sus campos actualizados.

Comments are closed.