2016-03-22 7 views
0

Ich verfolge die Gesamtkosten von Artikeln in einem Einkaufswagen mit Django. Mein Problem ist, dass der erste Gegenstand verfolgt wird. Wenn Sie die Menge abziehen oder die Menge reduzieren, passen Sie den Preis an. Aber alles, was darunter liegt, passt NICHT die Gesamtkosten an. Ich denke, das Problem ist, dass ich es nicht falsch durchlaufe. Nach vielen Stunden des Scheiterns dachte ich, dass ich fragen würde.Artikel in einem Einkaufswagen mit Django aktualisieren

In

def cart() 

ich durch die Membervariablen am Looping add Aktualisierung ihre Werte. Das Problem, das ich bin vor ist, dass nur die book_id an die cart() Funktion übergeben wird, wenn Sie remove_from_cart

klicken Aber wenn es ein Problem von nur einem book_id ist in dann weitergegeben werden, wie nur das erste Element kommt in der Korbliste ist unabhängig von der book_id geändert wird, die übergeben wird?

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') 

Antwort

1

Ihr Einzug ist leicht von

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') 
+0

omg ... Du bist so ein Chef. Dies verursachte mir stundenlange Trauer. Wie kann mein Linter das nicht fangen? Wie kann ich das in Zukunft vermeiden? – wuno

+0

Diese werden leider nur gefangen, indem man den Ablauf logisch versteht. Um zu debuggen, gibt es eine Möglichkeit, print-Anweisungen zu verwenden oder 'pdb' zu verwenden ... – karthikr

+0

Ok danke. Ich werde das nachsehen. – wuno

Verwandte Themen