【问题标题】:Adding a specific quantity of the product to the cart in django在 django 中将特定数量的产品添加到购物车
【发布时间】:2019-12-17 17:10:01
【问题描述】:

我有一个问题,因为我不知道如何实现“将特定数量的产品添加到购物车”。 目前,按下“添加到购物车”按钮后,会添加单个数量的产品。

我不知道如何在视图和模板中与此相关。

我希望它采用给定的值而不是 1。

cart_item.quantity += 1

cart/views.py

def add_cart(request, product_id):
    product = Product.objects.get(id=product_id)
    try:
        cart = Cart.objects.get(cart_id=_cart_id(request))
    except Cart.DoesNotExist:
        cart = Cart.objects.create(
                cart_id = _cart_id(request)
            )
        cart.save()
    try:
      cart_item = CartItem.objects.get(product=product, cart=cart)
      if cart_item.quantity < cart_item.product.stock:
          cart_item.quantity += 1
      cart_item.save()
    except CartItem.DoesNotExist:
      cart_item = CartItem.objects.create(
                  product = product,
                  quantity = 1,
                  cart = cart
          )
      cart_item.save()
    return redirect('cart:cart_detail')

cart/models.py

class Cart(models.Model):
    cart_id = models.CharField(max_length=250, blank=True)
    date_added = models.DateField(auto_now_add=True)
    class Meta:
        db_table = 'Cart'
        ordering = ['date_added']

    def __str__(self):
        return self.cart_id

class CartItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    active = models.BooleanField(default=True)
    class Meta:
        db_table = 'CartItem'

    def sub_total(self):
        return self.product.price * self.quantity

    def __str__(self):
        return self.product

templates/shop/product.html

  <div class="float-right">
   <div class="float-left"> <input type="number" value="1" aria-label="Search" 
    class="form-control" style="width: 100px"> </div>
    <a class="btn send-click btn-md my-0 p"  href="{% url 'cart:add_cart' product.id %}">Add to Cart</a></div>

urls.py

app_name='cart'

urlpatterns = [
    path('add/<int:product_id>/', views.add_cart, name='add_cart'),
    path('', views.cart_detail, name='cart_detail'),
    path('remove/<int:product_id>/', views.cart_remove, name='cart_remove'),
    path('full_remove/<int:product_id>/', views.full_remove, name='full_remove'),
]

【问题讨论】:

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


    【解决方案1】:

    如果您不想更改为带有后期处理的表单,您可以使用内联 JS 获取金额。您需要调整您的 url 和您的视图以接受项目数量。

    <div class="float-right">
       <div class="float-left"> <input id="amount_field" type="number" value="1" aria-label="Search" 
        class="form-control" style="width: 100px"> </div>
        <button type="button" onclick="location.href='{% url \"cart:add_cart\" product.id %}'.concat("/",document.getElementById('amount_field').value);" >Add Items</button>
    </div>
    

    【讨论】:

    • 我在上面添加了 urls.py。但是,我还是不明白,在 CartItem 模型中,我必须创建 'amount_field'?
    • 使用数量字段怎么样?
    • 如果我理解正确,我必须创建列,例如数量添加,而不是“1”。我将数量分配给数量添加,对吗?
    • 输入字段不应包含您要添加的数字。
    • 我在 quantityAdd 模型中创建并尝试添加 name="quantityAdd" 并将 'quantityAdd' 分配给视图中的 cart_item.quantity。
    猜你喜欢
    • 2016-02-28
    • 2020-04-28
    • 1970-01-01
    • 2012-06-09
    • 2018-07-23
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多