Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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
Example #4
0
    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
Example #5
0
 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
Example #6
0
    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
Example #7
0
    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)
Example #9
0
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,
    }
Example #10
0
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),
    }
Example #11
0
def basket(request):
    basket = []

    if request.user.is_authenticated:
        basket = Basket.get_items(request.user)

    return {
        'basket': basket,
    }
Example #12
0
 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})
Example #13
0
    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)
Example #14
0
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,
    }
Example #15
0
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,
    }
Example #16
0
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}
Example #17
0
    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)
Example #18
0
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})
Example #19
0
    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
Example #20
0
    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
Example #21
0
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})
Example #22
0
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,
        })
Example #23
0
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})