Graphene Django Mutation z ManyToMany Field jako argument

0

Mam sobie taki model:

class Reservation(models.Model):
    dog = models.ForeignKey('app.Dog', on_delete=models.CASCADE)
    date = models.DateTimeField()
    date_created = models.DateTimeField(auto_now_add=True)
    service = models.ManyToManyField('app.Service')

i taką mutację:

class CreateReservation(graphene.Mutation):
    reservation = graphene.Field(ReservationType)

    class Arguments:
        dog_name = graphene.String()
        date = graphene.types.datetime.DateTime()
        service = graphene.String()

    def mutate(self, info, dog_name, date, service):
        owner = info.context.user
        dog = Dog.objects.get(name=dog_name, owner=owner)

        reservation = Reservation(dog=dog, date=date, service=service)
        reservation.save()

        return CreateReservation(reservation=reservation)

z tym że nie mam pojęcia, jak podać kilka service jako argumenty.
Ktoś może pomóc?

0
  1. nie zrobisz tego w ten sposób, relacje m2m nie można dodać przed utowrzeniem obiektu w DB (przed .save())
  2. m2m najlepiej dodawać przez .add(obj1, obj2, obj3)
0
cmd napisał(a):
  1. nie zrobisz tego w ten sposób, relacje m2m nie można dodać przed utowrzeniem obiektu w DB (przed .save())
  2. m2m najlepiej dodawać przez .add(obj1, obj2, obj3)

Dzięki za odpowiedź, udało mi się to już wczoraj ogarnąć.

class CreateReservation(graphene.Mutation):
    reservation = graphene.Field(ReservationType)

    class Arguments:
        dog_name = graphene.String()
        date = graphene.types.datetime.DateTime()
        service = graphene.List(graphene.String)

    @login_required
    def mutate(self, info, dog_name, date, service=[]):
        owner = info.context.user
        dog = Dog.objects.get(name=dog_name, owner=owner)
        services = [Service.objects.get(name=one_service, size=dog.size) for one_service in service]

        reservation = Reservation.objects.create(dog=dog, date=date)
        reservation.save()
        reservation.service.set(services)

        return CreateReservation(reservation=reservation)

1 użytkowników online, w tym zalogowanych: 0, gości: 1