我的视图方法接受值和调用分数方法,但是我的终端输出此错误>
return sum(item['quantity'] for item in self.cart.values())
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
views.py
def cart_update(request):
cart = Cart(request)
quantity = request.GET.get('quantity')
product_slug = request.GET.get('product_slug')
product = Product.objects.get(slug=product_slug)
cart.add(product=product, quantity=quantity, update_quantity=True)
return JsonResponse({ # here errors
'cart_length':cart.get_length(),
'cart_total':cart.get_total_price(),
'cart_price':cart.get_price(product=product, quantity=quantity)
})
cart.py
def get_total_price(self):
return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())
def get_price(self, product, quantity):
return quantity * Decimal(product.price)
def get_length(self):
return sum(item['quantity'] for item in self.cart.values())
我做错了什么?
答案 0 :(得分:1)
在窗帘后面,sum(..)
将调用+
运算符来计算项的总和。
如果item['quantity']
中的一个是None
,那么当然会出现这样的情况:您将int
与None
相加,从而出现错误。
您可以通过以下方法过滤None
(例如零)来解决此问题:
sum(filter(None, (item['quantity'] for item in self.cart.values())))
尽管看起来为什么其中有None
可能是有益的,因此可以防止字典被None
s“污染”。 / p>
答案 1 :(得分:1)
self.cart.values()
中有一些元素的数量为None
使用None
语句只能对数量不为if
的商品求和
return sum(item['quantity'] for item in self.cart.values() if item['quantity'])