Создание нескольких экземпляров с заданными полями
У меня есть эти модели
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.