def form_valid(self, form): response = super().form_valid(form) order = self.object try: order.user = self.request.user except ValueError: order.user = None order.save() session = Session.objects.get(session_key=self.request.session.session_key) cart_products = Cart.objects.filter(session=session) products = [] order_products = [] for item in cart_products: if item.product.amount >= item.qty: product = item.product qty = item.qty product.amount -= qty products.append(product) order_product = OrderProduct(order=order, product=product, qty=qty) order_products.append(order_product) OrderProduct.objects.bulk_create(order_products) Product.objects.bulk_update(products, ('amount',)) cart_products.delete() return response
def form_valid(self, form): response = super().form_valid(form) order = self.object # оптимально: # цикл сам ничего не создаёт, не обновляет, не удаляет # цикл работает только с объектами в памяти # и заполняет два списка: products и order_products try: order.user = self.request.user except ValueError: order.user = None order.save() cart_products = Cart.objects.all() products = [] order_products = [] for item in cart_products: product = item.product qty = item.qty product.amount -= qty products.append(product) order_product = OrderProduct(order=order, product=product, qty=qty) order_products.append(order_product) # массовое создание всех товаров в заказе OrderProduct.objects.bulk_create(order_products) # массовое обновление остатка у всех товаров Product.objects.bulk_update(products, ('amount', )) # массовое удаление всех товаров в корзине cart_products.delete() return response
def form_valid(self, form): response = super().form_valid(form) order = self.object # оптимально: # цикл сам ничего не создаёт, не обновляет, не удаляет # цикл работает только с объектами в памяти # и заполняет два списка: products и order_products basket_products = Basket.objects.all() products = [] order_products = [] for item in basket_products: product = item.product amount = item.amount product.amount -= amount products.append(product) order_product = OrderProduct(order=order, product=product, amount=amount) order_products.append(order_product) # массовое создание всех товаров в заказе OrderProduct.objects.bulk_create(order_products) # массовое обновление остатка у всех товаров Product.objects.bulk_update(products, ('amount', )) # массовое удаление всех товаров в корзине basket_products.delete() return response
def post(self, request, *args, **kwargs): data = request.data object = Order.objects.create(name=data['name'], address=data['address'], phone=data['phone']) cart_products = Cart.objects.all() products = [] order_products = [] for item in cart_products: product = item.product qty = item.qty product.amount -= qty products.append(product) order_product = OrderProduct(order=object, product=product, qty=qty) order_products.append(order_product) # массовое создание всех товаров в заказе OrderProduct.objects.bulk_create(order_products) # массовое обновление остатка у всех товаров Product.objects.bulk_update(products, ('amount', )) # массовое удаление всех товаров в корзине cart_products.delete() return Response({"message": "Заказ создан"}, status=200)
def form_valid(self, form): response = super().form_valid(form) order = self.object cart_products = Cart.objects.all() products = [] order_products = [] if self.request.user.is_authenticated: user = self.request.user order.user = user order.save() for item in cart_products: product = item.product qty = item.qty product.amount -= qty products.append(product) order_product = OrderProduct(order=order, product=product, qty=qty) order_products.append(order_product) OrderProduct.objects.bulk_create(order_products) Product.objects.bulk_update(products, ('amount', )) cart_products.delete() return response
def form_valid(self, form): response = super().form_valid(form) order = self.object # оптимально: # цикл сам ничего не создаёт, не обновляет, не удаляет # цикл работает только с объектами в памяти # и заполняет два списка: products и order_products cart_products = Basket.objects.all() products = [] order_products = [] for item in cart_products: product = item.product qty = item.qty product.amount -= qty products.append(product) order_product = OrderProduct(order=order, product=product, qty=qty) order_products.append(order_product) OrderProduct.objects.bulk_create(order_products) Product.objects.bulk_update(products, ('amount', )) cart_products.delete() return response