【问题标题】:Updating Items In A Shopping Cart With Django使用 Django 更新购物车中的项目
【发布时间】:2016-03-22 23:26:25
【问题描述】:

我正在使用 Django 跟踪购物车中物品的总成本。我的问题是第一个项目被跟踪。当您减少数量或减少数量时,价格会调整。但是低于它的任何东西都不会调整总成本。我认为问题在于我没有错误地循环遍历它,所以经过数小时的失败后,我想我会问。

def cart() 

我正在循环成员变量添加更新 他们的价值观。我面临的问题是,当您单击remove_from_cart 时,只有book_id 被传递给cart() 函数

但如果是只传入一个book_id 的问题,那么无论传入的book_id 是什么,为什么只更改购物车列表中的第一项?

views.py

@login_required
def add_to_cart(request,book_id):
    book = get_object_or_404(Book, pk=book_id)
    cart,created = Cart.objects.get_or_create(user=request.user, active=True)
    order,created = BookOrder.objects.get_or_create(book=book,cart=cart)
    order.quantity += 1
    order.save()
    messages.success(request, "Cart updated!")
    return redirect('cart')


def remove_from_cart(request, book_id):
    if request.user.is_authenticated():
        try:
            book = Book.objects.get(pk = book_id)
        except ObjectDoesNotExist:
            pass 
        else:
            cart = Cart.objects.get(user = request.user, active = True)
            cart.remove_from_cart(book_id)
        return redirect('cart')
    else:
        return redirect('index')


def cart(request):
    if request.user.is_authenticated():
        cart = Cart.objects.filter(user=request.user.id, active = True)
        orders = BookOrder.objects.filter(cart=cart)
        total = 0
        count = 0
        for order in orders:
            total += order.book.price * order.quantity
            count += order.quantity
            context = {
            'cart': orders,
            'total': total,
            'count': count,
            }
            return render(request, 'store/cart.html', context)
        else:
            return redirect('index') 

【问题讨论】:

    标签: python django


    【解决方案1】:

    你的缩进有点偏离

    def cart(request):
        if request.user.is_authenticated():
            cart = Cart.objects.filter(user=request.user.id, active = True)
            orders = BookOrder.objects.filter(cart=cart)
            total = 0
            count = 0
            for order in orders:
                total += order.book.price * order.quantity
                count += order.quantity
            #Indentation needs to be offset by one level from here on
            context = {
                'cart': orders,
                'total': total,
                'count': count,
            }
            return render(request, 'store/cart.html', context)
        else:
            return redirect('index') 
    

    【讨论】:

    • omg...你真是个老板。这给我带来了数小时的悲伤。我的 linter 怎么能抓不到这个?以后如何避免这种情况?
    • 不幸的是,这些只有通过逻辑理解流程才能捕获。要进行调试,一种方法是使用 print 语句,或使用 pdb ...
    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2021-01-29
    • 2021-01-29
    相关资源
    最近更新 更多