计算总成本并将购物车添加销售税
问题描述:
我正在创建一个基本购物车应用程序,我可以在我的购物车中获取所有项目以填充数量和成本,但我试图找到一种方式即我可以创建一个总成本,并在其上添加销售税。显然,总的路线是问题,但我不确定我能做什么来填充所有产品的价格和数量,并将它们相乘。计算总成本并将购物车添加销售税
{% for addtocart in userCart %}
<li>Quantity:{{addtocart.quantity}} <a href="/products/{{addtocart.product.id}}">{{addtocart.product.prodName}}</a> ${{addtocart.product.prodPrice}}(<a
href=/delItem/{{addtocart.id}}>Remove</a>)<br>
{% endfor %}
</ul>
{% else %}
<p> No products available </p>
{% endif %}
***<p>Total: {{addtocart.quantity}}"x"{{addtocart.product.prodPrice}}***
views.py
def addtocart(request, prod_id):
if (request.method == 'POST'):
form = CartForm(request.POST)
if form.is_valid():
newComment = form.save()
newComment.session = request.session.session_key[:20]
newComment.save()
return HttpResponseRedirect('/products/' + str(newComment.product.id))
else:
form = CartForm({'name':'Your Name', 'session':'message', 'product':prod_id})
return render_to_response('Products/comment.html', {'form': form, 'prod_id': prod_id})
def userHistory(request):
userCart = Cart.objects.filter(session = request.session.session_key[:20])
return render_to_response('Products/history.html', {'userCart':userCart})
models.py
from django.db import models
from django.forms import ModelForm
# Create your models here.
class prod(models.Model):
prodName = models.CharField(max_length=100)
prodDesc = models.TextField()
prodPrice = models.FloatField()
prodImage = models.ImageField(upload_to="userimages/")
def __unicode__(self):
return self.prodName
class Cart(models.Model):
session = models.CharField(max_length=100)
product = models.ForeignKey('prod')
quantity = models.IntegerField()
def __unicode__(self):
return self.name
class CartForm(ModelForm):
class Meta:
model = Cart
exclude = ('session')
答
有两种方法可以做到这一点:
- 计算在你看来总,和作为单独的变量传入它
- 定义一个自定义模板标签,做乘法(Django不具有一个默认)
(1)的详细信息:
在你看来:
def userHistory(request):
userCart = Cart.objects.filter(session = request.session.session_key[:20])
totalCost = 0
for item in userCart:
totalCost += item.quantity * item.product.prodPrice
return render_to_response('Products/history.html', {'userCart':userCart,
'totalCost': totalCost})
然后在模板: <p>{{totalCost}}</p>
(2)的详细信息:
首先创建一个新的文件程序my_app/templatetags/my_tags.py(也放一个__init__.py文件在此目录中,这样Python知道这是一个包)
from django import template
register = template.Library()
@register.filter
def multiply(arg1, arg2):
return float(arg1) * float(arg2)
然后在模板顶部添加{% load my_tags %}
,并且您可以使用{{addtocart.quantity|multiply:addtocart.product.prodPrice}}
答
快速提示:您不会在购物车购买时记录价格。这可能是一些购物车的问题。取决于商店。
答
而不是把它放在你的视图中,我会让它成为你模型下的一个函数。这样,如果您必须计算应用中其他位置的总数,则不必重复使用相同的代码。
真正的问题是您使用的模型不正确。用户只有一个购物车,并不多。所以,你应该使用以下机型来代替:
class Cart(models.Model):
session = models.CharField(max_length=100)
class CartItem(models.Model):
cart = models.ForeignKey('Cart', related_name='items')
product = models.ForeignKey('prod')
quantity = models.IntegerField()
然后,你总函数添加到购物车型号:
class Cart(models.Model):
session = models.CharField(max_length=100)
items = models.ManyToManyField(prod, through="CartProduct")
def total(self):
total = 0.0
for item in self.items.all():
total += (item.product.prodPrice * item.quantity)
return total
我还严重推荐重命名督促模型到产品和重命名等领域以及匹配Django命名约定。
对不起听起来哑巴,但我更多地看情况1,它不是直截了当(我在一个非常初学者水平)。在我的views.py里面,我不确定要放什么 – 2012-04-25 04:08:45
你可以发布你的视图功能吗?这会让我更容易向您展示 – cberner 2012-04-25 04:18:11
顶部的编辑示例,感谢您的帮助 – 2012-04-25 04:29:58