def form_valid(self, form): context = self.get_context_data() orderitems = context['orderitems'] form.instance.user = self.request.user Basket.get_items(self.request.user).delete() self.object = form.save() if orderitems.is_valid(): orderitems.instance = self.object orderitems.save() if self.object.get_total_cost() == 0: self.object.delete() return super(OrderItemsCreate, self).form_valid(form)
def form_valid(self, form): context = self.get_context_data() orderitems = context['orderitems'] with transaction.atomic(): Basket.get_items(self.request.user).delete() form.instance.user = self.request.user self.object = form.save() if orderitems.is_valid(): orderitems.instance = self.object orderitems.save() if self.object.get_total_cost() == 0: self.object.delete() return super().form_valid(form)
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) orderformset = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = orderformset(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): data['basket_items'] = basket_items orderformset = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = orderformset() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price # form.initial['price'] = f'{basket_items[num].product.price} * {basket_items[num].product.quantity} = ${basket_items[num].product.cost}' else: formset = orderformset() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) # OrderFormSet = formset_factory(OrderItem, extra=1) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) # basket_items = Basket.objects.filter(user=self.request.user).order_by('product__category') if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() # for form in formset: for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity basket_items.delete() else: formset = OrderFormSet() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: # Получаем объекты корзины пользователя basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[ num].product.price_product basket_items.delete() else: # Если корзина пустая - создаем набор с одной чистой формой formset = OrderFormSet() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: # создание заказа на основе корзины formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price basket_items.delete() else: formset = OrderFormSet( ) # Для самостоятельного наполнения заказ data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price basket_items.delete() else: formset = OrderFormSet() data['orderitems'] = formset return data
def basket(request): title = 'корзина' basket_items = Basket.get_items(request.user).order_by('product__category') content = {'title': title, 'basket_items': basket_items} return render(request, 'basketapp/basket.html', content)
def basket(request): basket_list = [] if request.user.is_authenticated: # basket_list = Basket.objects.filter(user=request.user) basket_list = Basket.get_items(request.user).select_related() return { 'basket': basket_list, }
def basket(request): basket_items = [] if request.user.is_authenticated: basket_items = Basket.get_items(request.user) return { 'baskets': basket_items, 'total_sum': sum(basket.sum() for basket in basket_items), }
def basket(request): basket = [] if request.user.is_authenticated: basket = Basket.get_items(request.user) return { 'basket': basket, }
def delete(self, request, pk): if request.is_ajax: basket_item = Basket.objects.filter(user=request.user, id=pk).first() basket_item.delete() basket_items = Basket.get_items(request) context = {'basket_items': basket_items} result = render_to_string('basketapp/includes/cart.html', context, request) return JsonResponse({'result': result})
def get(self, request): basket_items = Basket.get_items(request) client_id = settings.CLIENT_ID context = { 'title': 'Basket', 'languages': Language.get_languages(), 'basket_items': basket_items, 'client_id': client_id, } return render(request, self.template_name, context)
def basket(request): # print(f'context processor basket works') basket = [] if request.user.is_authenticated: # basket = Basket.objects.filter(user=request.user).order_by('product__category') basket = Basket.get_items(request.user) return { 'basket': basket, }
def basket(request): # print(f'context processor basket works') basket = [] if request.user.is_authenticated: # basket = Basket.objects.filter(user=request.user) # basket = request.user.basket.select_related() basket = Basket.get_items(request.user) return { 'basket': basket, }
def basket(request): '''Получаем данные из корзины''' # print(f'context processor basket works') basket_list = [] if request.user.is_authenticated: # basket_list = Basket.objects.filter(user=request.user) # basket_list = Basket.objects.filter(user=request.user).order_by('product__category') # basket = Basket.get_item(request.user) # .select_related() - ускоряет получение данных, вытягивая внешние ключи # basket_list = Basket.objects.filter(user=request.user).select_related() заменяем на: basket_list = Basket.get_items(request.user) # basket_list = Basket.objects.filter(user=request.user) return {'basket': basket_list}
def form_valid(self, form): '''Сохраняем formset вызываемый при POST запросе к контроллеру OrderCreateView''' # выбираем весь контекст, набор форм и пользовательский ввод context = self.get_context_data() orderitems = context['orderitems'] # исключаем возможность ввода ошибочной информации от пользователя при передаче формы, # если is_valid - false, orderitems не сохраняется # для избежания этого оборачиваем код в атомарную(не делима) транзакцию к БД with transaction.atomic(): # а тут delete() применяем к QuerySet с корзинами пользователя Basket.get_items(self.request.user).delete() form.instance.user = self.request.user self.object = form.save() if orderitems.is_valid(): # instance - ссылка на родительский класс orderitems.instance = self.object orderitems.save() # удаляем пустой заказ if self.object.get_total_cost() == 0: self.object.delete() return super().form_valid(form)
def basket_edit(request, pk, quantity): if request.is_ajax(): quantity = int(quantity) new_basket_item = Basket.objects.get(pk=pk) if quantity > 0: new_basket_item.quantity = quantity new_basket_item.save() else: new_basket_item.delete() basket = Basket.get_items(request.user) content = { 'basket': basket, } result = render_to_string('basketapp/includes/inc_basket_list.html', content) return JsonResponse({'result': result})
def get_context_data(self, **kwargs): data = super(OrderCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: # basket_items = Basket.objects.filter(user=self.request.user) basket_items = Basket.get_items(user=self.request.user) if basket_items.exists(): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=basket_items.count()) formset = OrderFormSet() data['orderitems'] = formset for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price # basket_items.delete() else: formset = OrderFormSet() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): # получаем текущий контекст data = super(OrderItemsCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory( Order, OrderItem, form=OrderItemForm, extra=1) # пустая форма для добавления продуктов в заказ # После того, как пользователь нажмет на форме кнопку «Сохранить», создаем набор форм заново на основе данных # формы, переданных методом POST if self.request.POST: formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) # если корзина не пустая if len(basket_items): # обеспечиваем создание элементов заказа одновременно с самим заказом OrderFormSet = inlineformset_factory( Order, # родительский класс OrderItem, # класс, на основе которого будет создаваться набор форм класса, # указанного в именованном аргументе «form=OrderItemForm» form=OrderItemForm, # создаем набор в котором число форм = числу объектов в корзине extra=len(basket_items)) formset = OrderFormSet() # Заполняем в каждой форме поля «product» и «quantity». Чистим корзину. for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price basket_items.delete() else: # Если корзина пустая - создаем набор с одной чистой формой. formset = OrderFormSet() # добавляем данные в контекст data['orderitems'] = formset return data
def basket_edit(request, pk, quantity): if request.is_ajax(): quantity = int(quantity) new_basket_item = Basket.objects.get(pk=int(pk)) if quantity > 0: new_basket_item.quantity = quantity new_basket_item.save() else: new_basket_item.delete() # basket_items = Basket.objects.filter(user=request.user).order_by('product__category') basket = Basket.get_items(request.user) content = { # 'basket_items': basket_items, 'basket': basket, } result = render_to_string('basketapp/includes/inc_basket_list.html', content) return JsonResponse({'result': result})
def basket_update(request, pk, quantity): if request.is_ajax(): # basket_obj = get_object_or_404(Basket, pk=pk) basket_obj = Basket.objects.get(pk=int(pk)) quantity = int(quantity) if quantity > 0: basket_obj.quantity = quantity basket_obj.save() else: basket_obj.delete() basket = Basket.get_items(request.user) context = { # 'basket': get_basket(request), 'basket': basket, } result = render_to_string('basketapp/includes/inc__basket_list.html', context) return JsonResponse({ 'result': result, })
def basket_edit(request, pk, quantity): if request.is_ajax(): quantity = int(quantity) new_basket_item = Basket.objects.get(pk=int(pk)) if quantity > 0: new_basket_item.quantity = quantity new_basket_item.save() # update_queries = list(filter(lambda x: 'UPDATE' in x['sql'], connection.queries)) # print(f'query basket_add: {update_queries}') else: new_basket_item.delete() basket = Basket.get_items(request.user) # basket = request.user.basket.select_related() content = { 'basket': basket, } result = render_to_string('basketapp/includes/inc_basket_list.html', content) return JsonResponse({'result': result})