问题描述
我试图显示一个人订单中有多少种产品。我该怎么做呢?我想在order_detail.html页面中显示商品总数。
下面是我的代码供参考。
models.py:
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
order_id = models.CharField(max_length=20,default=increment_order_id,null=True,blank=True,editable=False)
location = models.ForeignKey(Location,on_delete=models.CASCADE)
route = models.ForeignKey(Route,on_delete=models.DO_nothing,blank=True)
delivery_date = models.DateField()
created = models.DateTimeField(auto_Now_add=True)
updated = models.DateTimeField(auto_Now=True)
paid = models.BooleanField(default=False)
discount = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
class OrderItem(models.Model):
order = models.ForeignKey(Order,on_delete=models.PROTECT,related_name='items',null=True)
desc = models.CharField(max_length=500,null=True)
# Item
product = models.ForeignKey(Product,related_name='order_items')
price = models.DecimalField(max_digits=10,default=0.00)
quantity = models.IntegerField(default=1,null=False)
views.py:
@method_decorator(login_required(login_url='account_login'),name='dispatch')
class OrderListView(ListFilteredMixin,ListView):
model = Order
template_name = 'orders/order/list.html'
filter_set = OrderFilter
queryset = Order.objects.all()
@login_required(login_url='account_login')
def order_detail(request,order_id):
order = get_object_or_404(Order,order_id=order_id)
order_item = OrderItem.objects.filter(order=order)
context = {
'order': order,'order_item': order_item
}
return render(request,'orders/order/detail.html',context)
解决方法
将代码更新为此:
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
order_id = models.CharField(max_length=20,default=increment_order_id,null=True,blank=True,editable=False)
location = models.ForeignKey(Location,on_delete=models.CASCADE)
route = models.ForeignKey(Route,on_delete=models.DO_NOTHING,blank=True)
delivery_date = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
discount = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
def count_items(self):
return self.items.count()
然后以{{ order.count_items }}
的html格式调用