Вставка в таблицу внутри цикла или массовая вставка с помощью django
Мне нужно вставить все товары в таблице Cart в таблицу под названием (OrderItem), я использовал этот код:
neworder.save()
new_order_items = Cart.objects.filter(user=request.user)
for item in new_order_items:
OrderItem.objects.create(
order=neworder,
product=item.product,
price=item.product.selling_price,
quantity=item.product_quantity
)
# decrease the product quantity from table
order_product = Product.objects.filter(id=item.product_id).first()
order_product.quantity = order_product.quantity - item.product_quantity
order_product.save()
этот код выше вставляет только первый товар из корзины в таблицу Item_orders? Хотя я использовал цикл?
Спасибо
Пауза. Я не знаю точно, потому что я не знаю всего о вашем проекте, но не думаете ли вы, что было бы проще просто сделать класс "orderItem" просто принимающим ID или имена элементов? Потому что тогда он мог бы просто использовать внешние объекты и получить доступ ко всем этим вещам более легко... И тогда вы просто очистите корзину после отправки ей идентификатора товара. Не совсем уверен, что это ответ на ваш вопрос, однако я просто решил рассказать вам об этом на случай, если это вам поможет.
Можете ли вы попробовать с таким подходом
from django.db import transaction
from django.db.models import F
with transaction.atomic():
new_order_items = Cart.objects.filter(user=request.user)
print(new_order_items) # check if we are getting more than 1 value or not it may be the reason that your loop run one time only bcz of this
orders = []
for item in new_order_items:
orders.append(OrderItem(
order=neworder,
product=item.product,
price=item.product.selling_price,
quantity=item.product_quantity
))
# decrease the product quantity from table
order_product = Product.objects.filter(id=item.product_id).update(quantity=F('quantity')-item.product_quantity) #Product id should be unique so this line should be
OrderItem.objects.bulk_create(orders)
Также вы должны хранить эти типы обновлений в атомарных транзакциях, иначе, если кто-то обновит количество товара, пока вы создаете объекты, это создаст беспорядок в реальном времени.