Добавление значений из словаря в поле ManytoMany
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)
table = models.ForeignKey(Table, on_delete=models.CASCADE, blank=True, null=True)
У меня есть набор запросов, который возвращает 3 экземпляра GuestOrder.
guest_orders = GuestOrder.objects.filter(table=table)
<QuerySet [<GuestOrder: GuestOrder object (567)>, <GuestOrder: GuestOrder object (568)>, <GuestOrder: GuestOrder object (569)>]>
и у меня есть словарь, где значениями являются экземпляры блюд.
{
"guests":{
"23": [1, 2],
"24": [2],
"25": [3]
}
}
Как установить каждое из этих значений для экземпляра guestorder?
Вот что я пробовал (имя словаря - гости)
for guestorder in guest_orders:
for key, value in guests.items():
guestorder.dish.set(value)
Это только устанавливает [3] в качестве блюда
попробуйте это
for guestorder in guest_orders:
for key, value in guests.items():
guestorder.dish.add(value)
// or
for guestorder in guest_orders:
guest_list = []
for key, value in guests.items():
guest_list.append(value)
guestorder.dish.set(guest_list)
https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_many/
Поэтому я добавил значения dict в новый список и выполнил итерацию над набором queryset и списком.
for value in guests.values():
dishes.append(value)
for f, b in zip(guest_orders, dishes):
f.dish.set(b)