python - 带有产品的 Django 购物车模型 - 实现项目数量
问题描述
我有一个购物车、产品和一个条目模型。我正在尝试做的是让用户可以选择在购物车中放入多于一件商品并在结账时显示数量。我可以得到选择的数量
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})
感谢帮助。
解决方案
如果我理解您问题的第一部分,您想知道如何在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,
})
让我知道这是否有帮助。
推荐阅读
- c# - 如何在无尽的跑步游戏中实现得分组合系统
- java - 带有 JAX-RS(例如带有 RestEasy)的 Unix Socket(例如用于 Docker)
- spring - 带有 aws cognito 的 Spring 项目
- flutter - 如何修复 Flutter 中 ListTile 中的 renderflex 错误?
- javascript - 如何在电子邮件中发送带有背景颜色的元素由变量组成
- mysql - 在 aws ec2 ubuntu 上设置 mysql 节点
- python - Python tkinter 在运行时重新启动主窗口
- python - 在 Django 中发布后使用 ListView 的查询集返回 httpresponse
- javascript - 通过网络在 Javascript 中发送十六进制值
- log4r - rails6 log4r tagged_logging.rb:22:in `call': 参数数量错误