Graphene Django Mutation z ManyToMany Field jako argument

Graphene Django Mutation z ManyToMany Field jako argument
Sevy
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Katowice
  • Postów: 20
0

Mam sobie taki model:

Kopiuj
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ę:

Kopiuj
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?

cmd
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 443
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)
Sevy
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Katowice
  • Postów: 20
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ąć.

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.