Создание нескольких экземпляров с заданными полями

У меня есть эти модели

class Guest(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    surname = models.CharField(max_length=100, blank=True, null=True)
    phone_number = models.CharField(max_length=50, blank=True, null=True)
    adress = models.CharField(max_length=200, blank=True, null=True)
    table = models.ForeignKey(Table, on_delete=models.CASCADE, blank=True, null=True)

class Dish(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)

class GuestOrder(models.Model):
    comment = models.CharField(max_length=400, blank=True, null=True)
    guest = models.ForeignKey(Guest, on_delete=models.SET_NULL, null=True)
    dish = models.ManyToManyField(Dish)
    ingredient = models.ManyToManyField(Ingredient)

И я получаю эти данные от postman

{
    "guests":{
        "23": [1, 2, 3],
        "24": [1, 2],
        "25": [1]
    }
}

Здесь 23-25 - идентификаторы гостей, а 1-3 - идентификаторы блюд.

Вот представление (я также получаю table_id от posman, но это не имеет отношения к вопросу)

class CreateOrderView(APIView):

    def post(self, request):
        table_id = request.data.get('table_id')
        table = Table.objects.get(id=table_id)
        number_of_guests = int(request.data.get('number_of_guests'))
        guest_orders = []
        guests = []
        for i in range(number_of_guests):
            guest = Guest()
            guest.table = table
            guest.first_name = str(i)
            guests.append(guest)
        Guest.objects.bulk_create(guests, number_of_guests)
        guests = request.data.get('guests')
        for key, value in guests.items():
            guest = find_guests(key)
            print(guest)
            # print(value)
            dish = find_dish(value)
            print(dish)
            GuestOrder.objects.create(guest=guest, table=table)
            guest_orders = GuestOrder.objects.filter(table=table)
            for guestorder in guest_orders:
                guestorder.dish.set(dish)
    return Response("5")

это вспомогательные функции, используемые в представлении.

def find_guests(id):
    found_guest = Guest.objects.get(id=id)
    return found_guest

def find_dish(list):
    for y in list:
        found_dishes = []
        found_dish = Dish.objects.get(id=y)
        found_dishes.append(found_dish)
    return found_dishes

Я создал заказ для каждого гостя, и что у меня не получается, так это установить заданные блюда для каждого GuestOrder. После вызова этого api он создает e GuestOrders и все 3 из них имеют 1-3 блюда и мне нужно, чтобы первый GuestOrder имел блюдо с id=1, второй id=1 и id=2 и третий все блюда 1-3.

Вернуться на верх