【发布时间】:2020-03-28 07:49:02
【问题描述】:
我目前正在开发一个在线商店,人们可以在其中将产品添加到购物车中。在我的主页 html 文件中,如果产品未添加到购物车,我想显示按钮“添加到购物车”,如果添加了产品,则显示“从购物车中删除”按钮。但它不能正常工作。我现在得到“从购物车中删除”按钮。 我的 index.html:
{% extends 'base.html' %}
{% block content %}
<h1>Products</h1>
<div class="container-md">
<div class="row">
{% for product in products %}
<div class="col">
<div class="card-deck" style="width: 18rem;">
<img src="{{ product.image_url }}" class="card-img-top" alt="...">
<div class="card-body">
<a class="card-title" href="{% url 'detail-view' product.slug %}">{{ product.name }}</a>
<p class="card-text">${{ product.price }}</p>
{% if product in Cart.products.all %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>
{% else %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
我的购物车views.py:
from django.shortcuts import render, redirect, HttpResponseRedirect
from products.models import Product
from .models import Cart
from django.contrib import messages
from django.urls import reverse
def cart(request):
cart = Cart.objects.all()[0]
context = {"cart":cart}
template = 'shopping_cart/cart.html'
return render(request, template, context)
def add_to_cart(request, slug):
cart = Cart.objects.all()[0]
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
pass
except:
pass
if not product in cart.products.all():
cart.products.add(product)
messages.success(request, f'Product added to cart')
return redirect('myshop-home')
else:
cart.products.remove(product)
messages.success(request, f'Product removed from cart')
return redirect('myshop-home')
new_total = 0.00
for item in cart.products.all():
new_total += float(item.price)
cart.total = new_total
cart.save()
return HttpResponseRedirect(reverse('cart'))
我的购物车的models.py:
from django.db import models
from products.models import Product
class Cart(models.Model):
products = models.ManyToManyField(Product, null=True, blank=True)
total = models.DecimalField(max_digits=100, decimal_places=2, default = 0.00)
def __unicode__(self):
return "Cart"
【问题讨论】:
-
你能分享你的模型吗?
-
我添加了购物车的 models.py