【问题标题】:Django Cart Model with products - implementing quantity of items带有产品的 Django 购物车模型 - 实现项目数量
【发布时间】:2018-05-16 10:20:57
【问题描述】:

我有一个购物车、产品和一个条目模型。我正在尝试做的是让用户可以选择在购物车中放入多于一件商品并在结账时显示数量。 我可以得到选择的数量超过

quantity_input= request.POST.get('quantity-field')

并在 cart_update() 中创建一个新的 Entry 对象

Entry.objects.create(cart=cart_obj, product=product_obj, quantity=quantity_form)

它知道它属于什么购物车和产品。 但是后来我在视图上输出它时碰壁了,因为我只有一个 cart_obj 作为上下文,不知道如何另外渲染入口对象。

购物车型号:

class Cart(models.Model):
        user        = models.ForeignKey(User, null=True, blank=True)
        products    = models.ManyToManyField(Product, blank=True)
        subtotal    = models.DecimalField(default=0.00, decimal_places=2, max_digits=100)
        total       = models.DecimalField(default=0.00, decimal_places=2, max_digits=100)    
        count       = models.PositiveIntegerField(default=0)

        objects = CartManager()

入门模型

class Entry(models.Model):
        product = models.ForeignKey(Product, null=True)
        eCart = models.ForeignKey(Cart, null=True)
        quantity = models.PositiveIntegerField()

@receiver(post_save, sender=Entry)
    def update_cart(sender, instance, **kwargs):
        line_cost = instance.quantity * instance.product.price
        instance.cart.count = int(instance.cart.count) + int(instance.quantity)

购物车views.py

​​>
def cart_update(request):
    product_id = request.POST.get('product_id')
    quantity_input= request.POST.get('quantity-field')

    if product_id is not None:            
        cart_obj, new_obj = Cart.objects.new_or_get(request)
        Entry.objects.create(cart=cart_obj, product=product_obj, quantity=quantity_input)
        cart_obj.products.add(product_obj)            
        added = True
        request.session['cart_items'] = cart_obj.products.count()        
    return redirect("carts:home")

def cart_home(request):
    cart_obj, new_obj = Cart.objects.new_or_get(request)
    return render(request, "carts/home.html",{"cart":cart_obj})

感谢您的帮助。

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    如果我理解您问题的第一部分,您想知道如何在 return render(request, "carts/home.html",{"cart":cart_obj}) 的上下文部分中传递多个内容。

    一种方法是将所需的所有模板变量存储在 dict 中,然后将 dict 作为上下文传递,如下所示:

    template_vars = {
       'cart': cart_obj,
       'entry': entry_obj,
       'some_var': some_value,
    }
    
    return render(request, "carts/home.html", template_vars)
    

    或者您可以按照您现在的方式进行操作,只需添加以下内容:

        return render(request, "carts/home.html", {
            'cart': cart_obj,
            'entry': entry_obj,
            'some_var': some_value,  
        })
    

    让我知道这是否有帮助。

    【讨论】:

    • 是的,它有帮助。我使用:entry_obj = Entry.objects.filter(cart=cart_obj) 然后像你说的那样作为另一个上下文对象添加。
    • @Tobstar 如果这回答了您的问题,请随时将我的问题标记为已接受的答案。如果它没有回答你的问题,请告诉我你还在想什么。
    猜你喜欢
    • 2018-05-18
    • 2017-04-27
    • 2013-09-24
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多