You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加商品至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")

额外优化建议

  1. 修复Listing模型中的字段错误:initial_price的default=False不符合金额类型要求,应改为数值默认值:
initial_price = models.DecimalField(decimal_places=2, max_digits=6, default=0.00)
  1. 确保模板中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:02:45