Django href 用于 django 购物车的递减和递增错误

Django href for decrement and increment error for a django cart

我正在做我的第一个 Django 项目。我正在创建一个电子商务商店,我遇到了一个我不知道如何解决的问题。 这是关于一个个性化的购物车,我试图在其中增加和减少购物车中的产品。

urls.py

urlpatterns = [
.......
path("cart/<int:id>/", views.increment, name="increment"),
    path("cart/<int:id>/", views.decrement, name="decrement"),
    path("cart/<int:pk>/", views.CartItemDelete.as_view(), name='cart_delete'),
.....]

views.py

def increment(request, id):
    if request.method == "GET":
        item = UserItem.objects.get(pk=int(id))
        if 0 < (item.quantity + 1) <= item.prod_id.quantity:
            item.quantity += 1
            item.save()
            return redirect('cart')
    return redirect('cart')


def decrement(request, id):
    if request.method == "GET":
        item = UserItem.objects.get(pk=int(id))
        if 0 < (item.quantity - 1) <= item.prod_id.quantity:
            item.quantity -= 1
            item.save()
            return redirect('cart')
    return redirect('cart')

class CartItemDelete(DeleteView):
    model = UserItem
    template_name = "cart_delete.html"
    context_object_name = "crt"
    success_url = reverse_lazy("cart")

模板

<div class="card" id="cardDisplay">
                <img class="card-img-top" src="{{ prd.img.url }}" alt="Card image" id="image_prod">
                <div class="card-body">
                    <h4 class="card-title">  {{ prd.name }}</h4>
                    <form action="{% url 'cart_qu' %}" method="get">
                    <label>
                    Quantity: <input type="number" name="quantity"  min="1" value="{{ prd.quantity }}" >
                        <input type="hidden" name="{{ prd.pk }}">
                    </label>
                    </form>
                    <a href="{% url "increment" prd.pk %}"><button>+</button></a>

                    <a href="{% url "decrement" prd.pk %}"><button>-</button></a><br>

                    <a href="{% url 'cart_delete' prd.pk %}">Delete</a>
                    <p class="card-text">Price: {{ prd.price }} lei <br>
                </div>

我的问题是,当我单击“+”按钮、“-”按钮或“删除”时,在 views.py 中它仅被调用 increment() 函数。如果我点击“-”,它会增加额外的数量而不是减少,对于删除也是如此......而不是删除,它会将产品数量增加 1。在我看来,事情似乎没问题。我不明白我错在哪里。如果有人可以提供帮助,我将不胜感激! 非常感谢您的宝贵时间!

Django 将使用匹配传入路径的 first url 服务请求,您的所有路径相互冲突(匹配相同的传入路径)但是“增量”是第一个,因此所有请求都将发送给它。

您需要更改路径,以免它们相互冲突

urlpatterns = [
    path("cart/<int:id>/increment/", views.increment, name="increment"),
    path("cart/<int:id>/decrement/", views.decrement, name="decrement"),
    path("cart/<int:pk>/", views.CartItemDelete.as_view(), name='cart_delete'),
]