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

Django访问/bid/2报NoReverseMatch错误的原因及解决方法咨询

错误原因
  • 核心原因是视图返回模板时的上下文变量名不匹配:set_bid视图给item.html传递的商品对象键名为listings,但模板中所有地方调用商品属性时用的变量名是item,导致模板渲染时item变量为空,调用{% url 'set_bid' item.id %}反转URL时无法传入必填的list_id参数,触发NoReverseMatch错误。
  • 次要问题:视图中给模板传递的bid是filter()返回的查询集(多个对象的集合),不是单个出价实例,模板后续调用{{ bid.bid }}时也会触发取值错误。
  • 冗余代码问题:对查询集调用update()方法后不需要再执行save(),多余的save()调用会报错。
解决方法
  1. 修正set_bid视图的上下文变量名,把listings改为item,和模板的变量名保持一致,同时修正bid的取值逻辑:
return render(request,"auctions/item.html",{
    # 把键名从listings改成item
    "item":Listing.objects.get(pk=list_id),
    "comments":Comments.objects.filter(comment_id=list_id),
    # 用first()拿单个出价实例,没有对应出价时返回None
    "bid":Bids.objects.filter(item=item).first(),
})
  1. 删除视图中多余的b.save()代码,修改后对应逻辑如下:
b=Bids.objects.filter(item=item)
if b:
    b.update(bid=price)
    # 删掉原来的b.save()行
else:
    b = Bids(bid=price,user=username,item=item)
    b.save()

内容的提问来源于stack exchange,提问作者Aaryan Rawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:45:04