Django外卖网站购物车报错:remove()缺少1个必填位置参数
购物车remove()方法缺少必填参数问题解决
核心错误点
你在视图函数cart_remove里犯了一个低级错误:调用cart_remove(dish)是在递归调用视图函数本身,而不是Cart实例的remove方法。视图函数需要request和dish_id两个参数,你只传了dish,自然会提示缺少必填参数。
修正后的视图代码
def cart_remove(request, dish_id): cart = Cart(request) dish = get_object_or_404(Dish, id=dish_id) cart.remove(dish) # 改为调用Cart实例的remove方法 return redirect('cart:cart_detail')
额外需要确认的地方
- 确保你的Cart类已经正确实现了
remove方法,示例实现参考:class Cart: def __init__(self, request): self.session = request.session cart = self.session.get('cart', {}) self.cart = cart def remove(self, dish): dish_id = str(dish.id) if dish_id in self.cart: del self.cart[dish_id] self.save() def save(self): self.session['cart'] = self.cart self.session.modified = True - URL配置中,建议明确指定
dish_id的类型为整数,避免类型不匹配问题:urlpatterns = [ path('', cart_detail, name='cart_detail'), path('add/<int:dish_id>/', cart_add, name='cart_add'), path('remove/<int:dish_id>/', cart_remove, name='cart_remove'), ]
内容的提问来源于stack exchange,提问作者Vitalik Ye
相关产品推荐
相关产品推荐

