Ejemplo n.º 1
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(OrderItemsCreate, self).form_valid(form)
Ejemplo n.º 2
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))

    product = get_object_or_404(Product, pk=pk)
    basket = Basket.objects.filter(user=request.user, product=product).first()

    if not basket:
        basket = Basket(user=request.user, product=product)

    basket.quantity += 1
    basket.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 3
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket_item = Basket.objects.filter(user=request.user, product=product).first()

    if not basket_item:
        basket_item = Basket(user=request.user, product=product)

    basket_item.quantity += 1
    # добавить 'quantity' в скобки при ошибке update_fields
    # (если будет приходить пустое поле в сигнале product_quantity_update_save)
    basket_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 4
0
def basket_add(request, pk):
    # Предварительне условия - пользоватль не авторизован на сайте, и закоментировать две последующие строки кода
    # Если зайти в продукты, выбрать категорию  и выбрать какой-нибудь товар, то  перенесет на страницу Аутентификации
    # if 'login' in request.META.get('HTTP_REFERER'):
    #     return HttpResponseRedirect(reverse('products:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket = Basket.objects.filter(user=request.user, product=product).first()

    if not basket:
        basket = Basket(user=request.user, product=product)

    basket.quantity += 1
    basket.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 5
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    old_basket_item = Basket.get_product(user=request.user, product=product)
    if old_basket_item:
        old_basket_item[0].quantity = F('quantity') + 1
        old_basket_item[0].save()
        update_queries = list(filter(lambda x: 'UPDATE' in x['sql'], connection.queries))
        print(f'query basket_add: {update_queries}')
    else:
        new_basket_item = Basket(user=request.user, product=product)
        new_basket_item.quantity += 1
        new_basket_item.save()
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 6
0
def add_product(request, pk):
    if LOGIN_URL in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('mainapp:item', kwargs={'pk': pk}))

    product = get_object_or_404(Product, pk=pk)
    # basket = request.user.basket_set.filter(product_pk=pk)
    basket = Basket.objects.filter(user=request.user, product=product).first()

    if not basket:
        basket = Basket(user=request.user, product=product)

    basket.quantity += 1
    basket.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 7
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('catalog:book', args=[pk]))

    book = get_object_or_404(Book, pk=pk)
    old_basket_item = Basket.objects.filter(user=request.user, book=book)

    if old_basket_item:
        old_basket_item[0].quantity += 1
        old_basket_item[0].save()
    else:
        new_basket_item = Basket(user=request.user, book=book)
        new_basket_item.quantity += 1
        new_basket_item.save()
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 8
0
def add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket_item = Basket.objects.filter(user=request.user,
                                        product=product).first()
    print(basket_item)
    if not basket_item:
        basket_item = Basket(user=request.user, product=product)

    basket_item.quantity += 1
    basket_item.save()

    return HttpResponseRedirect(request.META.get(
        'HTTP_REFERER'))  # возвращается на тот же адрес, от куда пришёл
Ejemplo n.º 9
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))

    product = get_object_or_404(Product, pk=pk)
    old_basket_item = Basket.objects.filter(user=request.user, product=product)

    if old_basket_item:
        old_basket_item[0].quantity += 1
        old_basket_item[0].save()
    else:
        new_basket_item = Basket(user=request.user, product=product)
        new_basket_item.quantity += 1
        new_basket_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 10
0
def basket_add(request, pk):
    if "login" in request.META.get("HTTP_REFERER"):
        return HttpResponseRedirect(reverse("products:product", args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket = Basket.objects.filter(user=request.user, product=product).first()

    if not basket:
        basket = Basket(user=request.user, product=product)
        basket.quantity += 1
    else:
        basket.quantity = F("quantity") + 1

    basket.save()

    update_queries = list(filter(lambda x: "UPDATE" in x["sql"], connection.queries))
    print(f"query basket_add: {update_queries}")
Ejemplo n.º 11
0
def OrderCreate(request):
    cart = Basket(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(order=order, product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])
            cart.clear()
            return render(request, 'orders/order/created.html', {'order': order})

    form = OrderCreateForm()
    return render(request, 'orders/order/create.html', {'cart': cart,
                                                        'form': form})
Ejemplo n.º 12
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
Ejemplo n.º 13
0
def basket_edit(request, pk, quantity):
    items = []
    baskets = []
    for item in items:
        baskets.append(Basket(
            user=request.user,
            product=item.get('product')
        ))

    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_items = Basket.objects.filter(user=request.user).order_by('product__category').select_related()

        content = {
            'basket_items': basket_items
        }

        result = render_to_string('basketapp/includes/inc_basket_list.html', content)

        return JsonResponse({'result': result})
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
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
Ejemplo n.º 16
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
Ejemplo n.º 17
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
Ejemplo n.º 18
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
Ejemplo n.º 19
0
def basket_add(request, pk):
    # reverse - преобразование записи namespace в обычный url, считаем что пользователь до авторизации пришёл
    # со страницы товара и редиректим его на страницу продукта
    # print(request.META.get('HTTP_REFERER'))
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('products:product', args=[pk]))
    # Проверяем существующий товар, а не удалённый
    # product_item = get_object_or_404(Product, pk=pk)
    product = get_object_or_404(Product, pk=pk)

    # basket_item = Basket.objects.filter(product=product_item, user=request.user).first()
    # Анонимный пользователь не может использоваться как ключ и в нем нет ID, для авторизации пользователя
    # используется специальный декоратор @login_required
    # вариант блока представлен в коде ниже
    ## basket = Basket.objects.filter(user=request.user, product=product).first()
    # # if not basket_item:
    # if not basket:
    #     # basket_item = Basket(user=request.user, product=product_item)
    #     basket = Basket(user=request.user, product=product)
    #
    # # basket_item.quantity += 1
    # basket.quantity += 1
    # # basket_item.save()
    # basket.save()
    # # HTTP_REFERER - адрес откуда пришёл пользователь
    # # print(request.META.get('HTTP_REFERER'))
    ## return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

    old_basket_item = Basket.get_product(user=request.user,
                                         product=product).select_related()
    # old_basket_item = Basket.get_product(user=request.user, product=product).first()
    if old_basket_item:
        # old_basket_item[0].quantity += 1
        old_basket_item[0].quantity = F('quantity') + 1
        old_basket_item[0].save()

        update_queries = list(
            filter(lambda x: 'UPDATE' in x['sql'], connection.queries))
        print(f'query basket_add: {update_queries}')
    else:
        new_basket_item = Basket(user=request.user, product=product)
        new_basket_item.quantity += 1
        # для django 3-й или выше версии с "update_fields=['quantity', 'product']", в др. случ. пусто ".save()"
        # new_basket_item.save(update_fields=['quantity', 'product'])
        new_basket_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 20
0
def main_basket(requset):
    title = 'Корзина'
    basket = Basket.get_basket(requset)
    context = {
        'title': title,
        'basket': basket,
    }
    return render(requset, 'basketapp/basket.html', context)
Ejemplo n.º 21
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,
    }
Ejemplo n.º 22
0
def basket_add(request, pk):  # pk = product_pk

    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('catalog:product', args=[pk]))

    product = get_object_or_404(Product, pk=pk)
    old_basket_item = Basket.get_product(user=request.user, product=product)

    if old_basket_item:
        # old_basket_item[0].quantity += 1
        old_basket_item[0].quantity = F('quantity') + 1
        old_basket_item[0].save()
    else:
        new_basket_item = Basket(user=request.user, product=product)
        new_basket_item.quantity += 1
        new_basket_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))  # отправляет пользователя обратно на ту же страницу
Ejemplo n.º 23
0
def add_product(request, slug):
    product = get_object_or_404(Product, slug=slug)
    exists_item = Basket.objects.filter(user=request.user,
                                        product=product).first()
    if exists_item:
        exists_item.quantity += 1
        exists_item.save()
    else:
        exists_item = Basket(product=product, user=request.user)
        exists_item.save()

    if request.is_ajax():
        return ajax_response(request, exists_item.product.slug,
                             exists_item.quantity)

    if 'login' in request.META.get('HTTP_REFERER'):
        return redirect('about', product=slug)
    return redirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 24
0
def basket(request):
    basket = []

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

    return {
        'basket': basket,
    }
Ejemplo n.º 25
0
def ajax_response(request, name, quantity):
    return JsonResponse({
        'name':
        name,
        'quantity':
        quantity,
        'basket':
        Basket.get_total_count_and_price(user=request.user)
    })
Ejemplo n.º 26
0
def add_product_to_basket(request, pk):
    print('-----------pk_basket-----------:', pk)
    product = get_object_or_404(Product, pk=pk)
    print('-----------product_basket-----------:', product)
    #product = get_object_or_404(ProductCatalog, pk=pk)
    old_basket_item = Basket.objects.filter(user=request.user, title=product)
    
    if old_basket_item:
        old_basket_item[0].quantity += 1
        old_basket_item[0].save()
        print('-----------old_basket_item[0].quantity-----------:', old_basket_item[0].quantity)
    else:
        new_basket_item = Basket(user=request.user, title=product)
        new_basket_item.quantity += 1
        new_basket_item.save()
        print('-----------new_basket_item.quantity-----------:', new_basket_item.quantity)
    
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 27
0
def basket_add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(
            reverse('products:product_details', args=[pk]))

    product = get_object_or_404(Product, pk=pk)
    basket_item = Basket.objects.filter(user=request.user,
                                        product=product).select_related()

    if basket_item:
        basket_item[0].quantity = F('quantity') + 1
        basket_item[0].save()
    else:
        new_basket_item = Basket(user=request.user, product=product)
        new_basket_item.quantity += 1
        new_basket_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 28
0
def add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('mainapp:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket_item = Basket.objects.filter(user=request.user,
                                        product=product).first()

    if not basket_item:
        basket_item = Basket(user=request.user, product=product)
        basket_item.quantity += 1
        basket_item.save()
    else:
        # basket_item[0].quantity += 1
        basket_item[0].quantity = F('quantity') + 1
        basket_item[0].save()

    # возвращаем на ту страницу, откуда пользователь пришел (request.META.get('HTTP_REFERER'))
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 29
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),
    }
Ejemplo n.º 30
0
def add(request, pk):
    if 'login' in request.META.get('HTTP_REFERER'):
        return HttpResponseRedirect(reverse('mainapp:product', args=[pk]))
    product = get_object_or_404(Product, pk=pk)
    basket_item = Basket.objects.filter(user=request.user,
                                        product=product).first()
    print(basket_item)
    if not basket_item:
        basket_item = Basket(user=request.user, product=product)
        basket_item.quantity += 1
    else:
        # basket_item.quantity += 1
        basket_item.quantity = F('quantity') + 1
    basket_item.save()
    update_queries = list(
        filter(lambda x: 'UPDATE' in x['sql'], connection.queries))
    print(f'запрос корзины: {update_queries}')
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))