[英]how to add quantity of products and update total in cart using django?
[英]How can i update quantity in the django cart?
model.py
class OrderItem(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE)
order = models.ForeignKey(Order, on_delete=models.CASCADE)
quantity = models.IntegerField()
date_added = models.DateTimeField(auto_now_add=True)
if request.method == "POST":
customer = request.user.customer
order ,created = Order.objects.get_or_create(customer=customer,complete=False)
id = request.POST.get('id')
product = Product.objects.get(id=id)
if OrderItem.objects.filter(product=product):
orderitem = OrderItem.objects.filter(product=product)
orderitem.quantity+=1
order.save()
else:
orderitem = OrderItem.objects.create(product=product,order=order,quantity=1)
products = Product.objects.all()
return render(request, "HTML/index.html",{'products':products})
錯誤
QuerySet' object has no attribute 'quantity'
如果此購物車中存在商品,我正在嘗試購物車,系統應更新其數量,如果沒有,則應在購物車中創建新商品,我該怎么做?
您正在嘗試將數量字段更新為查詢集,而不是 object。 如果您需要獲得 object,請使用“.get”而不是“.filter”,如下所示:
if OrderItem.objects.filter(product=product).exists():
orderitem = OrderItem.objects.get(product=product)
orderitem.quantity+=1
orderitem.save()
order.save()
基本上@STACCAH_STACCAH 的答案並不完全正確,您可以將多個OrderItem
實例附加到產品上。 所以你應該這樣做:
order_items = OrderItem.objects.filter(product=product)
for item in order_items:
item.quantity += 1
item.save()
應該足夠了,您不需要檢查 object 是否存在,因為即使元素數量肯定為零, QuerySet
也是可迭代的。 基本上這意味着forloop
在迭代OrderItem
實例時不會引發異常。
正如已經指出的那樣,您正在嘗試設置 QuerySet 而不是 object 的屬性。 您可以使用.update()
function 和F()
表達式和一行來更改查詢集中的所有對象:
from django.db.models import F
OrderItem.objects.filter(product=product).update(quantity=F('quantity')+1)
您無需檢查它們是否存在或使用 for 循環,更簡潔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.