【问题标题】:Django href for decrement and increment error for a django cartDjango href 用于 django 购物车的递减和递增错误
【发布时间】:2021-05-27 14:04:26
【问题描述】:

我正在做我的第一个 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。在我看来,事情似乎没问题。我不明白我错在哪里。如果有人可以提供帮助,我将不胜感激! 衷心感谢您的宝贵时间!

【问题讨论】:

    标签: python django django-views django-templates django-urls


    【解决方案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'),
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2020-11-25
      • 2020-01-04
      相关资源
      最近更新 更多