添加商品至Watchlist时触发「无匹配Watchlist」错误求助
问题排查与解决方案
错误原因
当前代码中,Watchlist与User是一对一关联,但用户首次尝试添加商品到收藏夹时,系统并未自动为该用户创建对应的Watchlist记录。get_object_or_404(Watchlist, user=request.user)会直接抛出404错误,因为数据库里找不到匹配的Watchlist条目,这就是"No Watchlist matches the given query"错误的根源。
解决方案
修改views.py中的add_to_watchlist函数,使用Django的get_or_create方法,确保用户的Watchlist不存在时自动创建:
def add_to_watchlist(request, item_id): item = get_object_or_404(Listing, pk=item_id) # 使用get_or_create获取或创建用户的Watchlist user_watchlist, created = Watchlist.objects.get_or_create(user=request.user) user_watchlist.items.add(item) return redirect("watchlist")
额外优化建议
- 修复
Listing模型中的字段错误:initial_price的default=False不符合金额类型要求,应改为数值默认值:
initial_price = models.DecimalField(decimal_places=2, max_digits=6, default=0.00)
- 确保模板中
watchlist_items变量正确传递:在商品详情视图中,需将当前用户的收藏夹商品列表传入模板:
def listing_detail(request, item_id): listing = get_object_or_404(Listing, pk=item_id) # 判断用户是否有收藏夹,再获取对应商品 watchlist_items = request.user.watchlist.items.all() if hasattr(request.user, 'watchlist') else [] return render(request, 'listing_detail.html', {'listing': listing, 'watchlist_items': watchlist_items})
内容的提问来源于stack exchange,提问作者Ogbonna Echefunachukwu
相关产品推荐
相关产品推荐

